【问题标题】:TypeScript: How to add static methods to built-in classesTypeScript:如何向内置类添加静态方法
【发布时间】:2018-03-21 17:49:01
【问题描述】:

无论如何,是否可以为DateStringArray 等类型添加一些静态方法?

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

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

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

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

【问题讨论】:

标签: typescript defineproperty class-extensions


【解决方案1】:

您必须扩充DateConstructor 接口才能添加静态属性:

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

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

类似地扩展StringConstructorArrayConstructor 用于字符串和数组。见declaration merging

【讨论】:

【解决方案2】:

我使用此代码通过静态方法扩展 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);

【讨论】:

  • 您可以轻松使用import。无需创建额外的类。
猜你喜欢
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 2021-03-18
  • 2023-03-25
  • 2020-11-12
  • 2021-05-17
  • 1970-01-01
  • 2021-04-09
相关资源
最近更新 更多