如何将`.ToList()`方法添加到Typescript`Array `class?
如何将.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在你的屏幕截图中是红色的? –