在"Typescript extend String Static"的帖子中,我得到了一些我们可以扩展现有的typescript基类,例如,添加新方法
interface StringConstructor {
isNullOrEmpty(str:string):boolean;
}
String.isNullOrEmpty = (str:string) => !str;
它确实有效。但对于通用接口,我遇到了问题。例如,我需要在Array中添加新方法contains()。我使用以下代码:
//1
interface Array<T> {
contain(item: T): boolean;
}
//2
?????? = (item: T) => {
// ....
return true;
};
在step1之后,在VS intellisense中弹出包含方法,但是我在哪里可以实现方法?
答案 0 :(得分:3)
由于接口中的定义已经绑定到泛型约束,因此在实现中您可以将其视为任何约束:
interface Array<T> {
contain(item: T): boolean;
}
Array.prototype.contain = function(item) {
return this.some(obj => item == obj);
};
另外,不要将箭头函数用于原型方法,原因如下:
interface Array<T> {
fn(): void;
}
Array.prototype.fn = () => {
console.log(this);
};
let a = [];
a.fn(); // Window
可是:
Array.prototype.fn = function() {
console.log(this);
};
let a = [];
a.fn(); // []
如果您定位es5
或更低,那么编译器将箭头功能转换为常规功能并不重要,但如果您将切换到定位es6
(和箭头函数将持续存在)然后您的代码将中断,您不会理解为什么。