【发布时间】:2021-09-06 03:29:59
【问题描述】:
我试图弄清楚如何正确键入一个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 的定义存在的?
【问题讨论】:
-
这有什么用?在 JavaScript 中,每个原始值和对象都有一个
toString方法。 -
由于编译器抱怨
toString不存在,我假设存在没有toString的有效属性。无论哪种方式,我都可能想将相同的模式应用于比toString不太常见的东西:如果我想保证T[K]是给定类型V怎么办? -
@Clashsoft
null没有toString()... 也没有undefined。 -
请参阅the answer 到这个重复的问题以获取更多信息;在这里翻译该代码会产生this...祝你好运!
-
@jcalz,谢谢,这帮助很大!
标签: typescript tsc