Typescript中的扩展方法(Extension Method)


这个问题的起因:review公司项目的时候,发现很多如下的代码(mock)
先是一个工具类Util.ts

class NumberUtil {
    static ToInt(num?: Number): number {
        num = num || 0;
        return Math.floor(num);
    }
}

在需要使用的地方调用工具类

var intNumber = NumberUtil.ToInt(12.34);

这种方式当然可以应付业务,但总觉得low了点。我们做过C#的都知道有扩展方法一说,而JS有prototype可以扩展。 那么TypeScript是怎么支持的呢?

且看下面的步骤:
1:新建一个测试项目 create-react-app XXX --template typescript
2:在src -> @types下新建global.d.ts,内容如下(代码网上随便抄的)

declare global {  
    interface Number {  
        thousandsSeperator(): String;  
    }  
}  
export {}; 

3:src下新建extension.ts

Number.prototype.thousandsSeperator = function(): string {  
    return Number(this).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');  
}  
export {}; 

4:最后在需要引用的代码中加入

import "../extension";

const num=111111;
console.log(num.thousandsSeperator() );

上述是一种比较麻烦的验证方式。 如果你用的是ts-node命令行,可以参考如下:
tsconfig.json中加入

    "ts-node": {
        "files": true
      },
      "files": [
        "extension.ts",
        "sample.ts",
        "@types/global.d.ts"
      ],

如下图:

sample.ts

import "./extension";
const num=111111;
console.log(num.thousandsSeperator() );

如下图

最后执行ts-node sample.ts


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM