我有一个对象,其值类型为string
和number
:
interface Person {
name: string;
age: number;
}
我有一个函数可以更改对象,其中一个参数作为字段索引,另一个作为字段值:
const person = {name: "Fred", age: "30"};
const changePerson = (index: keyof Person, value: string | number): void => {
person[index] = value;
}
问题在于,正如 TypeScript 所见,index
可以是“名称”,value
可以是数字,但这种情况永远不会发生。我不确定如何链接 index
和 value
来告诉 TypeScript 这些类型以特定方式链接。
有人可以帮忙吗?
我能够通过使用 case 语句来消除错误,但它不会像 TypeScript 通常那样被转译出来:
const changePerson = (index: keyof Person, value: string | number): void => {
switch(index) {
case "name":
person[index] = value as string;
break;
default:
person[index] = value as number;
}
}
最佳答案
你可以用泛型来做到这一点:
<T extends keyof Person>(index: T, value: Person[T]): void
这基本上告诉类型系统第二个参数必须是第一个参数指向的类型。
Typescript playground 上的完整示例
关于javascript - 如何在 TypeScript 中链接函数参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58550033/