【发布时间】:2019-04-22 10:59:14
【问题描述】:
我正在尝试为我附加到 Array.prototype 的 JavaScript 函数编写 Typescript 定义文件。
Array.js
/**
* Flattens the array recursively.
*
* @example
* [1, [2, 3]].flat() // => [1, 2, 3]
*
* @example
* [[1, [2, 3], [4, [5]]], 6].flat() // => [1, 2, 3, 4, 5, 6]
*/
Array.prototype.flat = function () {
return this.reduce((arr, val) => Array.isArray(val) ? arr.concat(val.flat()) : arr.concat(val), []);
}
flat() 在Array<T|S> 上工作,其中S 是Array<T|S> 并返回Array<T>。也就是说,它具有递归定义,并且所有数组都符合定义,因为[1, 2, 3].flat() 将简单地返回原始数组的副本。
我是 TypeScript 的新手,但我的理解是,为了获得 TypeScript 定义文件(即 IntelliSense)的好处,方法定义必须在 interface Array<T> 内。如果是这种情况,有没有办法对T 的专用版本Array<T> 施加约束?
如果不是,我如何定义一个接口,该接口将为每个数组拾取并识别该数组何时适合递归定义?
【问题讨论】:
标签: javascript typescript typescript-generics