首页 > 解决方案 > 如何在 TypeScript 中扩展原始类型?

问题描述

我试图通过添加一个方法来扩展numberTypeScript 中的原语。clamp我试过这样做:

declare global {
    interface Number {
        clamp(min: number, max: number): number
    }
}

Number.prototype.clamp = function(min, max): number {
    return Math.min(Math.max(this, min), max);
};

此时我希望能够在number变量上使用它,但我的 IDE(WebStorm 2021.1.3)已经指出了问题:

TS2345: Argument of type 'Number' is not assignable to parameter of type 'number'. 'number' is a primitive, but 'Number' is a wrapper object. Prefer using 'number' when possible.

阅读此内容后,我尝试更改interface Numberinterface number,但遇到了TS2427: Interface name cannot be 'number'.

所以我恢复了我的更改并@ts-ignore在钳位实现的错误行中打了一巴掌并尝试使用它......但是:

let x: number = 10;
x.clamp(0, 5);  // TS2339: Property 'clamp' does not exist on type 'number'.

是什么赋予了?如何正确扩展 TypeScript 中的原始类型?

标签: typescript

解决方案


推荐阅读