如何將.ToList()
方法添加到Typescript的Array<T>
類中。我期待最後的結果。如何將`.ToList()`方法添加到Typescript`Array <T>`class?
let nums:List<number> = [1,2,3,5,6].ToList();
let strs:List<string> = ["abc", "cdf", "efg"].ToList();
請分享如果有任何示例git repo可用。
我收到以下錯誤。
而不導出界面我正在
如何將.ToList()
方法添加到Typescript的Array<T>
類中。我期待最後的結果。如何將`.ToList()`方法添加到Typescript`Array <T>`class?
let nums:List<number> = [1,2,3,5,6].ToList();
let strs:List<string> = ["abc", "cdf", "efg"].ToList();
請分享如果有任何示例git repo可用。
我收到以下錯誤。
而不導出界面我正在
你可以做到這一點的JavaScript的方式,通過添加功能到Array.prototype收到下面的錯誤。但是,如果你想要類型安全,你將不得不做一些類型的斷言。
功能添加到陣列原型:
(<any>Array.prototype).ToList = function() {
return this.join(",");
}
打字稿,您可以通過重新聲明它們並添加自己的功能擴展接口:
interface Array<T> {
ToList:() => string
}
斷言數組你想打電話給ToList就是接口類型:
let a = [1,2,3,5,6].ToList();
Array的接口是可擴展的,因爲typescript中的所有接口都是可擴展的。一個簡單的例子:
list.d.ts:
interface Array<T> {
ToList():List;
}
list.ts:
/// <reference "./list.d.ts" />
Array.prototype.ToList = function() {
return this.toString();
}
使用它:
let arr = [1,2,3]
let list = arr.ToList();
只是不要export
接口和你的代碼將無錯地編譯。
class List<T> {
constructor(items: T[]) {}
}
interface Array<T> {
ToList():List<T>;
}
Array.prototype.ToList = function() {
return new List(this);
};
編輯#1
它看起來像從模塊出口字面上什麼打破了彙編,並導致OP的錯誤。我向微軟提交了一個問題。請參閱:https://github.com/Microsoft/TypeScript/issues/8278
編輯#2
好了,事實證明,增加出口語句上面的例子(字面出口任何東西)引起OP的錯誤。微軟的人回答了我們的問題,結果我們沒有以正確的方式指定Array接口的類型信息。所以這裏是如何做到這一點:
class List<T> {
constructor(items: T[]) {}
}
declare global {
interface Array<T> {
ToList():List<T>;
}
}
Array.prototype.ToList = function() {
return new List(this);
};
export default List;
由於我的代碼中'class'前面的'export'導致錯誤。如果沒有'export',我不能在另一個'ts'文件中使用這個類。 –
@NatarajanGanapathi這看起來像打字稿中的一個錯誤。我提交了一個問題(請參閱我的更新),將會看到它應該如何工作。 –
終於我得到了答案。
declare global {
interface Array<T> {
ToList(): List<T>;
}
}
Array.prototype.ToList = function() {
return new List(this);
}`
export class List<T> {
constructor(private array: T[] = []) {}
public Add(item: T): List<T> {
this.array.push(item);
return this.array.ToList();
}
}
什麼是List接口?在你的代碼中定製的東西? – toskv
是的..列表是我自己的實現.. –
爲什麼Array和List在你的屏幕截圖中是紅色的? –