2 回答
TA貢獻1828條經(jīng)驗 獲得超3個贊
該錯誤是因為您將 key 參數(shù)指定為 ExampleInterface 的鍵,并且它有 2 種數(shù)據(jù)類型,即字符串和數(shù)字。KeyOf 將兩種數(shù)據(jù)類型都應用于傳遞的變量,這違反了分配數(shù)據(jù)類型的規(guī)則。因此,當您將類型擴展并應用到它映射到鍵的正確類型的值時,您可以將 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條經(jīng)驗 獲得超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;
}
那就是您接近的語法。
添加回答
舉報
