在 TypeScript 中扩展 Date.prototype

ora*_*rad 3 typescript

请帮助我理解为什么这适用于 Number 而不适用于 Date。

declare interface Number {
    toPreferredStringFormat(): string;
}

declare interface Date {
    toPreferredStringFormat: string;
}

(function () {
    // OK
    Number.prototype.toPreferredStringFormat = () => {
        return this.toString() + " preferred!";
    };

    // ERROR (why?!)
    Date.prototype.toPreferredStringFormat = () => {
        return this.toString() + " preferred!";
    };
})();
Run Code Online (Sandbox Code Playgroud)

我做得对吗?

谢谢!

Mil*_*nić 8

当我想用新方法扩展 Date 原型时,对我有用的是:

declare global {
    interface Date{
        yyyymmdd: () => string;    
    }
}
Run Code Online (Sandbox Code Playgroud)

我从这里拿起这个


Fen*_*ton 5

您的两个声明之间存在细微差别......

toPreferredStringFormat(): string; // has ()
toPreferredStringFormat: string; // doesn't have ()
Run Code Online (Sandbox Code Playgroud)

这两个中的第二个表示该属性是一个字符串,第一个表示它是一个函数。

这是一个完整的工作示例,使用长篇大论的方式说您希望函数返回一个字符串,这使得它比括号的存在更明显,但这也有效:

declare interface Number {
    toPreferredStringFormat: () => string;
}

declare interface Date {
    toPreferredStringFormat: () => string;
}

(function () {
    // OK
    Number.prototype.toPreferredStringFormat = () => {
        return this.toString() + " preferred!";
    };

    // ERROR (why?!)
    Date.prototype.toPreferredStringFormat = () => {
        return this.toString() + " preferred!";
    };
})();
Run Code Online (Sandbox Code Playgroud)