Ric*_*ick 4 typescript typescript2.0
我有一个用例,我认为这对于Typescript的Pick类型是完美的.
这是一个精简的例子:
interface CreditCard {
name: string;
year: number;
expired: boolean;
}
function setValue(key: keyof CreditCard, value: Pick<CreditCard, typeof key>) {
// do stuff...
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试调用此函数时:
setValue("name", "rick");
Run Code Online (Sandbox Code Playgroud)
Typescript(2.3.4)给出以下错误:
error TS2345: Argument of type '"rick"' is not assignable to parameter of type 'Pick<CreditCard, "name" | "year" | "expired">'.
Run Code Online (Sandbox Code Playgroud)
另外,我没有CreditCard可用作为参数传入的实例,因此CreditCard在我的用例中不可能更改函数以作为第三个参数.
Pick<Obj, Props>创建一个类似于Obj仅指定属性的类型Props,而您的示例尝试使用它来获取单个属性的类型,而应该像这样:CreditCard[KeyType]
你的setValue函数应如下所示:
function setValue<K extends keyof CreditCard>(key: K, value: CreditCard[K]) {
// do stuff...
}
Run Code Online (Sandbox Code Playgroud)
您设置了泛型类型K,它是一个或多个键的字符串文字类型CreditCard.然后使用该类型来获取属性的类型CreditCard.调用函数时,类型系统将K尽可能缩小,并使用它来计算value参数的特定类型.
| 归档时间: |
|
| 查看次数: |
1079 次 |
| 最近记录: |