'-6ren"> '-我有一个用例,我认为它非常适合 Typescript 的 Pick类型。 这是一个简化的例子: interface CreditCard { name: string; year: numbe-6ren">
gpt4 book ai didi

Typescript Pick<> 类型失败 : Argument of type '"foo "' is not assignable to parameter of type ' Pick'

转载 作者:搜寻专家 更新时间:2023-10-30 21:04:36 27 4
gpt4 key购买 nike

我有一个用例,我认为它非常适合 Typescript 的 Pick类型。

这是一个简化的例子:

interface CreditCard {
name: string;
year: number;
expired: boolean;
}

function setValue(key: keyof CreditCard, value: Pick<CreditCard, typeof key>) {
// do stuff...
}

但是,当我尝试调用这个函数时:

setValue("name", "rick");

Typescript (2.3.4) 出现以下错误:

error TS2345: Argument of type '"rick"' is not assignable to parameter of type 'Pick<CreditCard, "name" | "year" | "expired">'.

此外,我没有有一个 CreditCard 的实例可以作为参数传入,因此更改函数以获取 CreditCard作为第三个参数在我的用例中是不可能的。

最佳答案

Pick<Obj, Props>创建一个看起来像 Obj 的类型仅具有 Props 指定的属性,而您的示例试图使用它来获取单个属性的类型,而应该像这样完成:CreditCard[KeyType]

您的 setValue 函数应如下所示:

function setValue<K extends keyof CreditCard>(key: K, value: CreditCard[K]) {
// do stuff...
}

您为 CreditCard 的一个或多个键设置了一个通用类型 K,它是一个字符串文字类型。 .然后使用该类型从 CreditCard 中获取属性的类型.当调用该函数时,类型系统将缩小 K尽可能地使用它来找出 value 的特定类型争论。

关于Typescript Pick<> 类型失败 : Argument of type '"foo "' is not assignable to parameter of type ' Pick<Bar, "foo">',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44678263/

27 4 0