此示例使用继承来扩展原始对象.命名仅用于说明.
class Test {
baseMethod() {
}
}
class TestWithClose extends Test {
close() {
}
}
var t = new TestWithClose();
t.close();
t.baseMethod();
更新
您已在评论中提到可以按照自己的方式编写内置函数的扩展方法,我可以看到您希望对自己的代码执行相同的操作,但这是不可能的.
我希望这能解释原因.
在TypeScript中创建声明时,可以通过添加声明来扩展声明.您可以使用declare关键字或将文件放在.d.ts文件中:
例如,如果您在一个文件中包含此声明:
declare interface ExampleInterface {
methodOne();
}
您可以在另一个文件中扩展声明:
declare interface ExampleInterface {
methodTwo();
}
因此,当您使用它时,您可以使用这两种功能:
function example(example: ExampleInterface) {
example.methodOne();
example.methodTwo();
}
这些并不是真正的扩展方法 – 这只是告诉编译器不止一次实现.这对jQuery特别有用,因为它允许每个插件都有一个添加到JQuery接口的定义.
您无法为自己的TypeScript代码执行此操作,因为添加到接口将导致所有实现都需要更新以匹配接口定义.
这里的思维转变是TypeScript给你静态输入,你正在寻找动态行为 – 所以你必须选择一个或另一个.例如,您可以在您真正需要的地方使用动态行为,并将其余部分静态输入:
class Test {
}
// statically typed
var stTest = new Test();
// dynamically typed
var testExtender: any = Test;
testExtender.prototype.close = function() {
alert('Close');
};
var t: any = new Test();
t.close();
这并不是说将来不会添加某些语言来支持扩展方法.