2017-10-10 56 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'。無需創建額外的類。 –

相關問題