gpt4 book ai didi

javascript - 如何在 TypeScript 中链接函数参数类型?

转载 作者:行者123 更新时间:2023-12-02 22:42:08 26 4
gpt4 key购买 nike

我有一个对象,其值类型为stringnumber:

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 可以是数字,但这种情况永远不会发生。我不确定如何链接 indexvalue 来告诉 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com