在TypeScript中扩展Date.prototype

时间:2013-01-30 23:28:57

标签: typescript

请帮助我理解为什么这适用于数字但不适用于日期。

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!";
    };
})();

我做得对吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

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

toPreferredStringFormat(): string; // has ()
toPreferredStringFormat: string; // doesn't have ()

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

这是一个完整的工作示例,使用长期的方式说你期望一个函数返回一个字符串,这使得它更明显,而不仅仅是括号的存在,但这也有效:

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!";
    };
})();

答案 1 :(得分:4)

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

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

我从here

中选择了这个