11

无论如何,是否可以向 , , 等类型添加一些Date静态String方法Array

例如,我想向类添加方法todayDate而在 JavaScript 中,我可以简单地向它添加一个属性,或者我可以使用 Object.defineProperty:

Date.today = function(){
    let date = new Date;
    date.setHours(0,0,0,0);
    return date;
}

Object.defineProperty(Date, 'today', { get() { ... }});

但无论如何我都没有找到TypeScript关于这个新静态成员的信息。我错过了什么还是我用谷歌搜索的方式不对?

4

2 回答 2

18

您必须扩充DateConstructor界面以添加静态属性:

declare global {
    interface DateConstructor {
        today: () => Date
    }
}   

Date.today = function(){
    let date = new Date;
    date.setHours(0,0,0,0);
    return date;
}

类似地扩展StringConstructorArrayConstructor用于字符串和数组。请参阅声明合并

于 2017-10-10T11:27:24.020 回答
1

我使用此代码用静态方法扩展 Object。导出类 ObjectExtensions { }

declare global {
    interface ObjectConstructor {
        safeGet<T>(expresstion: () => T, defaultValue: T): T;
    }
}

Object.safeGet = function <T>(expresstion: () => T, defaultValue: T): T {
    try {
        const value = expresstion();
        if (value != null) return value;

    } catch (e) {
    }
    return defaultValue;
}

在 main.ts 你必须像这样调用这个类

new ObjectExtensions();

然后你可以像这样使用它:

Object.safeGet<number>(() => data.property.numberProperty);
于 2018-03-07T14:52:19.450 回答