Javascript 在方法TypeScript中使用泛型类型

Javascript 在方法TypeScript中使用泛型类型,javascript,typescript,Javascript,Typescript,在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 &&

在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));
          });
      }
}
公共静态sortByProperty(数组:T[],属性:字符串):void { var availProps:string[]=Object.getOwnPropertyNames(T);//或某种类型的T,无论如何我都会出错 如果(availProps.length>0&&availProps.indexOf(prop)>-1){ 返回array.Sort(函数(a,b){ var aItem=a[prop]; var bItem=b[prop]; 返回((aItembItem)?1:0)); }); } } 我想用像

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

我得到一个错误,
T
未知

您必须将数组元素传递给
对象。getOwnPropertyNames()
不是T


一旦编译后,它就不再在Javascript中可用。这只适用于打字脚本。您可以使用
Object.getOwnPropertyNames(数组[0])
,它应该通过T对象的所有属性进行迭代。

为什么不让编译器为您执行属性检查呢。您可以将
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
类测试{
公共静态sortByProperty(数组:T[],属性:keyof T):void{
array.sort(函数(a,b){
var aItem=a[prop];
var bItem=b[prop];
返回((aItembItem)?1:0));
});
}
}
接口对象{
测试:字符串
}
Test.sortByProperty([{Test:“something”}],“Test”);//好啊
Test.sortByProperty([{Test:“something”}],“notaprop”);//错误

如果要自己检查属性,要回答原始问题,必须将值传递给
Object.getOwnPropertyNames
类似于:
Object.getOwnPropertyNames(数组[0])
,假设数组至少有一个项