3

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

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

我做对了吗?

谢谢!

4

2 回答 2

10

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

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

我从这里捡到的

于 2016-05-26T19:24:30.373 回答
5

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

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!";
    };
})();
于 2013-05-01T08:10:36.247 回答