class ts 扩展方法_在TypeScript中扩展功能

I am currently learning TypeScript, and would like to know how it is possible to add functionality to existing objects. Say I want to add an implementation for Foo to the String object. In JavaScript I would do this:

String.prototype.Foo = function() {

// DO THIS...

}

Understanding that TypeScript classes, interfaces and modules are open ended led me to try the following, without success

1. Reference the JavaScript implementation from TypeScript

JavaScript:

String.prototype.Foo = function() {

// DO THIS...

}

TypeScript:

var x = "Hello World";

x.Foo(); //ERROR, Method does not exist

2. Extend the interface

interface String {

Foo(): number;

}

var x = "Hello World";

x.Foo(); //Exists but no implementation.

3. Extend the class

class String {

Foo(): number {

return 0;

}

}

// ERROR: Duplicate identifier 'String'

As you can see from these results, so far I have been able to add the method via an interface contract, but no implementation, so, how do I go about defining AND implementing my Foo method as part of the pre-existing String class?

解决方案

I have found the solution. It takes a combination of the interface and the JavaScript implementation. The interface provides the contract for TypeScript, allowing visibility of the new method. The JavaScript implementation provides the code that will be executed when the method is called.

Example:

interface String {

foo(): number;

}

String.prototype.foo= function() {

return 0;

}

As of TypeScript 1.4 you can now also extend static members:

interface StringConstructor {

bar(msg: string): void;

}

String.bar = function(msg: string) {

console.log("Example of static extension: " + msg);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值