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"'