Метод расширения по номеру в TypeScript - PullRequest
2 голосов
/ 14 февраля 2020

Я прочитал, что можно добавить методы расширения к типам в 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?

1 Ответ

3 голосов
/ 14 февраля 2020

Поскольку вы определяете расширение в файле, который является модулем, вам нужно добавить объявление расширения в 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

...