【问题标题】:Extension method on number in TypeScriptTypeScript中数字的扩展方法
【发布时间】:2020-02-14 18:37:18
【问题描述】:

我已经读到add Extension Methods to types in TypeScript 是可能的,但是在将其应用于内置类型 Number 时遇到了一些麻烦。

这里有一些代码:

文件 A:NumberExtensions.ts

// tslint:disable-next-line:class-name interface-name
export interface Number {
    isBigNumber(value: number): boolean;
}
// @ts-ignore
Number.prototype.isBigNumber = (value: number) => {
    return value > 100000;
};

文件 B:使用上述内容

import { Number } from "./NumberExtensions";

foo() {
    const aBigNumber: number = 1000000000;

    // Errors here TS2339: Property 'isBigNumber' does not exist on type 'number'.
    if (aBigNumber.isBigNumber()) {
        console.log("It's a big number!");
    }
}

我对 TypeScript 扩展方法的声明和使用是否正确?

【问题讨论】:

标签: typescript extension-methods


【解决方案1】:

由于您在作为模块的文件中定义了扩充,因此您需要在 declare global 中添加扩充声明:


export { }
declare global {
    export interface Number {
        isBigNumber(): boolean;
    }
}
Number.prototype.isBigNumber = function (this: number)  {
    return this > 100000;
};

function foo() {
    const aBigNumber: number = 1000000000;

    // Errors here TS2339: Property 'isBigNumber' does not exist on type 'number'.
    if (aBigNumber.isBigNumber()) {
        console.log("It's a big number!");
    }
}



Playground Link

【讨论】:

  • 好的。这行得通,但我不太明白为什么(Javascript不是我的强项)。尽管如此,我已经在一个文件中使用 export / declare global / number.prototype 了,第二个文件只有“import ./NumberExtensions”。谢谢你的帮助!
猜你喜欢
  • 2019-12-24
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 2012-09-29
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
相关资源
最近更新 更多