Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypeScript-带有keyof关键字的类型推断_Typescript_Type Inference - Fatal编程技术网

TypeScript-带有keyof关键字的类型推断

TypeScript-带有keyof关键字的类型推断,typescript,type-inference,Typescript,Type Inference,我有一个抽象类 export abstract class ABaseModel { public static isKeyOf<T>(propName: (keyof T)): string { return propName; } } 要检查字符串是否是该类的有效属性,我必须 Model.isKeyOf<Model>('id'); 使用类型推断难道不可能吗?这似乎有效: abstract class ABaseModel { public

我有一个抽象类

export abstract class ABaseModel {
  public static isKeyOf<T>(propName: (keyof T)): string {
    return propName;
  }
}
要检查字符串是否是该类的有效属性,我必须

Model.isKeyOf<Model>('id');
使用类型推断难道不可能吗?

这似乎有效:

abstract class ABaseModel {
    public static isKeyOf<T>(this: { new(): T }, propName: (keyof T)): string {
        return propName;
    }
}

Model.isKeyOf("id"); // ok
Model.isKeyOf("name"); // error: Argument of type '"name"' is not assignable to parameter of type '"id" | "uid" | "createdByUid"'
抽象类ABaseModel{
公共静态isKeyOf(this:{new():T},propName:(keyof T)):字符串{
返回propName;
}
}
Model.isKeyOf(“id”);//好啊
Model.isKeyOf(“名称”);//错误:“name”类型的参数不能分配给“id”|“uid”|“createdByUid”类型的参数

()

获取错误:“typeof Model”类型的“this”上下文不可分配给“new()=>Model”类型的方法“this”。您的
Model
类的签名是什么?它应该是相同的,例如,如果它是
类模型{constructor(a:string,b:number){…}
,那么您应该使用:
(this:{new(a:string,b:number):T}
构造函数是
构造函数(props:any[]){super();Object.assign(this,props);}
因此它可以与
公共静态isKeyOf(this:{new({}):T},propName:(keyof T)):string{return propName;}
很好,非常感谢!
Model.isKeyOf('id');
abstract class ABaseModel {
    public static isKeyOf<T>(this: { new(): T }, propName: (keyof T)): string {
        return propName;
    }
}

Model.isKeyOf("id"); // ok
Model.isKeyOf("name"); // error: Argument of type '"name"' is not assignable to parameter of type '"id" | "uid" | "createdByUid"'