2017-10-10 9 views
0

何とか静的メソッドをDate,String,Arrayなどの型に追加する方法はありますか?私はこの方法にtodayDateにクラスを追加し、JavaScriptで、私は単にそれにプロパティを追加することができますまたは多分私はObject.definePropertyを使いたい例えばTypeScript:組み込みクラスに静的メソッドを追加する方法

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

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

しかし、私はdidnのとにかくこの新しい静的メンバーについてTypeScriptに知らせることはできません。 何か不足していますか、それとも間違った方法でgoogleしましたか?

+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

このコードを使用して、静的メソッドでオブジェクトを拡張します。 輸出クラスObjectExtensions {} main.tsで

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; 
} 

あなたはこの

new ObjectExtensions(); 

のように、このクラスを呼び出す必要があります。そして、あなたはこのようにそれを使用することができます:

Object.safeGet<number>(() => data.property.numberProperty); 
+0

あなたは 'import'を簡単に使うことができます。余分なクラスを作成する必要はありません。 –

関連する問題