2017-06-13 11 views
0

typescriptですで、私は次のコードを持っている:使用ジェネリック型は

public static sortByProperty<T>(array: T[], prop: string): void 
{ 
     var availProps: string[] = Object.getOwnPropertyNames(T); // or something typeof T, anyway I got error 

     if(availProps.length>0 && availProps.indexOf(prop) > -1){ 
      return array.Sort(function(a, b) { 
       var aItem = a[prop]; 
       var bItem = b[prop]; 
       return ((aItem < bItem) ? -1 : ((aItem > bItem) ? 1 : 0)); 
      }); 
     } 
} 

をし、私はエラーを得た

Test.sortByProperty<MyObject>(arrayOf_MyObject, "APropertyName"); 

のように使用したいTは不明であることを

答えて

2

コンパイラにプロパティチェックをさせてみませんか? propパラメーターをkeyof Tと入力すると、コンパイラーがそのパラメーターを適用します。

class Test { 
    public static sortByProperty<T>(array: T[], prop: keyof T): void { 

     array.sort(function (a, b) { 
     var aItem = a[prop]; 
     var bItem = b[prop]; 
     return ((aItem < bItem) ? -1 : ((aItem > bItem) ? 1 : 0)); 
     }); 
    } 
} 

interface MyObject { 
    test: string 
} 

Test.sortByProperty<MyObject>([{test: "something"}], "test"); // OK 
Test.sortByProperty<MyObject>([{test: "something"}], "notaprop"); // Error 

あなたが財産を自分で確認したい場合は、あなたがObject.getOwnPropertyNamesに何か値を渡す必要があなたの元の質問に答えるために:Object.getOwnPropertyNames(array[0])はあなたの配列は、少なくとも一つのアイテムを持っていると仮定します。

0

あなたを配列要素をObject.getOwnPropertyNames()に渡す必要があります。

TはJavで利用できませんいったんそれがコンパイルされると、もはや肩代わりしない。それはTypescriptだけです。 Object.getOwnPropertyNames(array[0])を使用すると、Tオブジェクトのすべてのプロパティを繰り返し処理する必要があります。

関連する問題