2017-10-10 138 views
0

是否有无论如何添加一些静态方法类型如DateString, Array等?TypeScript:如何将静态方法添加到内置类

比如我想添加方法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关于这个新的静态成员。 我错过了什么,或者我谷歌错误的方式吗?

+0

HTTPS:/ /stackoverflow.com/questions/36910521/how-to-extend-native-javascript-types-in-typescript-1-8-using-global-augmentatio – haim770

+0

@ haim770正如我所说,我正在寻找类扩展而不是原型。 –

回答

2

你必须以增强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

0

我用这段代码用静态方法扩展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); 
+0

您可以轻松使用'import'。无需创建额外的类。 –

相关问题