我可以扩展Array.prototype并在javascript中使用它:
Object.defineProperty(Array.prototype, 'flatten', {
value: function flatten() {
return this.reduce((a, b) => a.concat(b), []);
}
});
// that allows me to do:
[1, 2, [3, 4]].flatten(); // [1,2,3,4]
[1, 2, [3, 4]].map(e => 5).flatten(); // [5, 5, 5]
但是在打字稿下我得到一个错误:属性'flatten'在类型'Array []'上不存在。
我可以避免做类似下面这样的事情,但是这对于获得流畅的界面并不好......它更难以阅读。
(<any>[1, 2, [3, 4]]).flatten()
([1, 2, [3, 4]].map(e => 5) as any).flatten()
我可以在打字稿中做些什么来避免任何投射吗?就像让我们动态地了解typescript而不是Array类型的代码有另一种方法。
答案 0 :(得分:4)
您可以扩展Array<T>
界面以添加flatten
方法:
declare global {
interface Array<T> {
flatten(): T[]
}
}
请注意,只有当您在模块内时,才需要将其包含在declare global
内。见merging interfaces.