打字稿选择字符串属性
我试图找出如何正确键入show,将采取一个对象的功能T和一键K为其T[K]能保证有一个toString()方法来实现。
这是我尝试使用映射类型
type ToStringablePropertyKeys<T> = keyof {
[K in keyof T]: { toString(): string }
}
function show<T, K extends ToStringablePropertyKeys<T>>(t: T, k: K): string {
return t[k].toString()
}
但是编译器说 Property 'toString' does not exist on type 'T[K]'.
我在这里缺少什么?我怎样才能让tsc这toString实际上是在通过有定义K?
回答
另一种方法:
function show<K extends string, T extends {[key in K]:{toString(): string}}>
(t: T, k: K ): string {
return t[k].toString()
}
- nice thinking outside the box!