2 回答
TA贡献1828条经验 获得超3个赞
该错误是因为您将 key 参数指定为 ExampleInterface 的键,并且它有 2 种数据类型,即字符串和数字。KeyOf 将两种数据类型都应用于传递的变量,这违反了分配数据类型的规则。因此,当您将类型扩展并应用到它映射到键的正确类型的值时,您可以将 keyOf 扩展为泛型。
以下是您的代码的修复。
setState<K extends keyof ExampleInterface>(key: K, value: ExampleInterface[K]){
this.exampleVariable[key] = value;
}
但是您可以重写代码以设置泛型类型的值,下面是示例。
setProperty<T, K extends keyof T>(obj: T, key: K, value: T[K]) {
obj[key] = value;
}
TA贡献1796条经验 获得超4个赞
我想这就是你要找的:
interface ExampleInterface {
[key: string]: number;
}
const exampleVariable: ExampleInterface = {
['hello world'] : 0,
}
console.log(exampleVariable)
const setState = (key: string, value: number) => {
exampleVariable[key] = value;
}
setState('hello world', 1);
console.log(exampleVariable)
查看索引签名以便更好地理解。
如果在setState中你想通过接口引用接口类型,这也是有效的:
const setState = (keyArg: keyof ExampleInterface, value: ExampleInterface['key']) => {
exampleVariable[keyArg] = value;
}
那就是您接近的语法。
添加回答
举报