TypeScript 中数字的扩展方法

Dr.*_*ABT 6 extension-methods typescript

我读到可以向 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;
};
Run Code Online (Sandbox Code Playgroud)

文件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!");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Tit*_*mir 7

由于您在作为模块的文件中定义了增强,因此您需要在以下文件中添加增强声明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!");
    }
}



Run Code Online (Sandbox Code Playgroud)

游乐场链接