Typescript Pick <> type failing:类型'“foo”'的参数不能分配给类型为'Pick '的参数'
问题描述:
我有一个用例,我认为它对于Typescript的Pick类型来说是完美的。Typescript Pick <> type failing:类型'“foo”'的参数不能分配给类型为'Pick <Bar, "foo">'的参数'
这里有一个下调例如:
interface CreditCard {
name: string;
year: number;
expired: boolean;
}
function setValue(key: keyof CreditCard, value: Pick<CreditCard, typeof key>) {
// do stuff...
}
然而,当我尝试调用此函数:
setValue("name", "rick");
打字稿(2.3.4)提供了以下错误:
error TS2345: Argument of type '"rick"' is not assignable to parameter of type 'Pick<CreditCard, "name" | "year" | "expired">'.
另外,我做不是有一个的实例可以作为参数传入,因此在我的用例中,更改函数以将CreditCard
作为第三个参数是不可能的。
答
Pick<Obj, Props>
创建一个类型,看起来像Obj
只有通过Props
指定的属性,而你的例子是试图用它来获得一个属性的类型,这应该不是这样进行:CreditCard[KeyType]
你的setValue函数应该是这样的:
function setValue<K extends keyof CreditCard>(key: K, value: CreditCard[K]) {
// do stuff...
}
你建立一个通用的K型这是一个字符串类型的一个或多个CreditCard
的关键。然后,您使用该类型来获取CreditCard
的属性类型。调用该函数时,类型系统将尽可能缩小K
,并使用它来确定value
参数的特定类型。