在我基于TypeScript
的应用程序中,我想为Array
- 原型添加一些功能。
因此我在项目中添加了一个文件Array.d.ts
,其中包含:
interface Array<T> {
selectMany<TOut>(selectListFn: (t: T) => TOut[]): TOut[];
}
然后我在/Scripts/Extentsions/Array.ts
下创建了另一个文件,我在其中实现了函数:
Array.prototype.selectMany = Array.prototype.selectMany || function<TIn, TOut>(selectListFn: (t: TIn) => TOut[]): TOut[] {
return this.reduce((out, inx) => {
out.push(...selectListFn(inx));
return out;
}, new Array<TOut>());
}
在另一个文件中,我将在DivisionResource[]
- 数组中使用“扩展”,其中DivisionResource
只是数组元素的具体类型。
Intellisense没有显示错误,但在运行webpack
时会抛出
TS2339:'DivisionResource []'类型中不存在属性'selectMany'。
我不明白这里遗漏的是什么。
答案 0 :(得分:0)
你应该使用“global”包装全局类型的合并,像这样;
declare global {
interface Array<T> {
selectMany<TOut>(selectListFn: (t: T) => TOut[]): TOut[];
}
}
https://www.typescriptlang.org/docs/handbook/declaration-merging.html
您还可以尝试将声明文件的三斜杠引用添加到.ts文件中。
/// <reference path="../Array.d.ts" />