如何为 setProperty 方法“key”和“value”的参数添加类型
是否有更多的动态方式而不是 string
或只是添加所有可能的类型,例如 'name' | 'age' | 'sex'
以使其更具可扩展性。
class Person {
name: string;
age: number;
sex: 'men' | 'women'
setProperty(key: string, value: any): Person {
this[key] = value
return this
}
}
答案 0 :(得分:3)
您可以使用 key
类型来确定 value
的可用值,甚至是 keyof
该属性名称的类型:
class Person {
name?: string;
age?: number;
sex?: 'men' | 'women'
setProperty<K extends keyof Person>(this: Person, key: K, value: Person[K]): Person {
this[key] = value
return this
}
}
const p = new Person();
p.setProperty('name', 'John Smith'); // fine
p.setProperty('age', 40); // fine
p.setProperty('sex', 'foo'); // not fine
如果您不希望 setProperty
可重新分配(这似乎很可能),您可以改用 keyof Omit<Person, 'setProperty'>
。