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);
}