我想只循环某个类的某些键。我不想使用索引签名[key:string]:any
,因为不推荐。
这是我的想法:
interface I {
a: string,
b: number
}
type NullKeysOf<T> = {
[P in keyof T]: null
}
type PartialNullKeysOf<T> = Partial<NullKeysOf<T>>;
const obj:PartialNullKeysOf<I> = {
a:null
}
class A<M extends I> implements I{
a:string;
b:number;
obj:PartialNullKeysOf<M>
constructor(a:string, b:number, obj:PartialNullKeysOf<M>){
this.a = a;
this.b = b;
this.obj = obj;
}
public loop(){
for(const k in this.obj){
console.log(this[k]);
}
}
}
const a = new A<I>('',3,obj);
a.loop();
这是打字稿游乐场链接
我得到了错误
Type 'Extract<keyof M, string>' cannot be used to index type 'this'.
为什么k
循环中的类型是Extract<keyof M, string>
?不应该typeof I
吗?