下面的v2初始化给出:Type 'T[keyof T]' cannot be converted to type 'number'.
出了什么问题?
private func<T extends Object>(o:T, prop: keyof(T)): void {
const val = o[prop]
if ( typeof val === 'number' ) {
const v2: number = val as number
}
}
这适用于非通用上下文,[UPDATE],但这不适用于解决方法,因为调用者只能使用Object本身的属性。
private func2(o:Object, prop: keyof(Object)): void {
const val = o[prop]
if ( typeof val === 'number' ) {
const v2: number = val as number
}
}
这是一个愚蠢的例子,我提取以专注于问题;如果一个真实的背景会有所帮助,请告诉我。
答案 0 :(得分:1)
我是打字稿的新手,但我似乎必须按照建议here
进行双重投射 private func1<T extends Object>(o:T, prop: keyof(T)): void {
const val = o[prop]
if ( typeof val === 'number' ) {
const v2: number = val as any as number
}
除此之外,您可以像这样使用它吗?我至少在文档上看过它。 Section Index Types
private func<T extends Object, K extends keyof T>(o: T, prop: K): void {
const val = o[prop]
if (typeof val === 'number') {
const v2 = val as any as number
}
}
希望这有帮助。