【发布时间】:2019-10-25 05:15:30
【问题描述】:
我正试图围绕条件映射类型展开思考。如果我有一个类型定义为:
type StringyProps<T> = { [K in keyof T]: T[K] extends string ? K : never }[keyof T];
[keyof T] 最后的构造是做什么的?如何找到有关您可以用它做什么的文档?
另外,我写了一个函数:
function getString<T>(thing: T, prop: StringyProps<T>): string {
return thing[prop] as string;
}
如果我有如下界面:
interface Something {
name: string,
id: string,
age: number,
weight: number
}
我收到以下编译时错误:
console.log(getString(pippy, "name")); // ok
console.log(getString(pippy, "age")); // age is not assignable to parameter of type "name" | "id"
这太棒了,但我的函数无法编译,因为将 StringyProp 的值分配给字符串可能是错误的。如果我将返回值更改为return thing[prop] as unknown as string,它会返回正确的值。
我怎样才能构造它,这样我就不必断言未知和重新断言字符串?
【问题讨论】:
标签: typescript conditional-types mapped-types