Javascript 扩展TypeScript中的功能
可能重复:Javascript 扩展TypeScript中的功能,javascript,typescript,Javascript,Typescript,可能重复: 我目前正在学习TypeScript,想知道如何向现有对象添加功能。假设我想将Foo的实现添加到String对象。在JavaScript中,我会这样做: String.prototype.Foo = function() { // DO THIS... } 了解到TypeScript类、接口和模块是开放式的,我尝试了以下方法,但没有成功 一,。从TypeScript中引用JavaScript实现 二,。扩展接口 三,。扩展课程 从这些结果中可以看出,到目前为止,我已经能够通
我目前正在学习TypeScript,想知道如何向现有对象添加功能。假设我想将Foo的实现添加到String对象。在JavaScript中,我会这样做:
String.prototype.Foo = function() {
// DO THIS...
}
了解到TypeScript类、接口和模块是开放式的,我尝试了以下方法,但没有成功
一,。从TypeScript中引用JavaScript实现
二,。扩展接口
三,。扩展课程
从这些结果中可以看出,到目前为止,我已经能够通过接口契约添加该方法,但没有实现,因此,如何将我的Foo方法定义并实现为预先存在的String类的一部分?我找到了解决方案。它结合了界面和JavaScript实现。该接口提供了TypeScript的契约,允许新方法的可见性。JavaScript实现提供了调用该方法时将执行的代码 示例:
interface String {
foo(): number;
}
String.prototype.foo= function() {
return 0;
}
interface StringConstructor {
bar(msg: string): void;
}
String.bar = function(msg: string) {
console.log("Example of static extension: " + msg);
}
从TypeScript 1.4开始,您现在还可以扩展静态成员:
interface String {
foo(): number;
}
String.prototype.foo= function() {
return 0;
}
interface StringConstructor {
bar(msg: string): void;
}
String.bar = function(msg: string) {
console.log("Example of static extension: " + msg);
}
没错,这就是它的本意。记住,TypeScript本身不是一种语言,它只是一种语法糖。所以,用“JavaScript风格”编写东西是一个很好的实践,它没有任何缺点。这个解决方案真的适用于字符串吗?因为我正在做完全相同的事情,并得到编译错误,该属性在字符串类型上不存在。我错过了什么?(使用tsc 1.4.1)@OlegMihailik不是所有的语言都只是语法糖吗?@series0ne,如果上面的copypast代码,
[ts]属性“foo”在类型“String”上不存在。
以防其他人遇到与我相同的问题:我在这里使用了代码,并且发现它工作正常。但是,如果我在模块中使用它(即使用export
语句),那么我会得到错误[ts]属性“foo”在类型“String”上不存在。
(在VS代码和游戏场中)。修复方法是将接口设置为全局:声明全局{interface String{foo():number;}}
。
interface StringConstructor {
bar(msg: string): void;
}
String.bar = function(msg: string) {
console.log("Example of static extension: " + msg);
}