'的参数'" /> '的参数' - 源码之家" />

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参数的特定类型。