【发布时间】:2017-02-10 14:59:36
【问题描述】:
下面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
}
}
这是我提取出来的一个愚蠢的例子,专注于这个问题;如果真实的上下文有帮助,请告诉我。
【问题讨论】:
-
你必须把它转换成一个数字吗?类型不是推断出来的吗?
-
@MuratK。如果我不投,也会出现同样的错误(措辞略有不同)。我包括演员,因为如果我没有,我会得到我应该尝试的 cmets! ;-)
-
如果有更多专家可以解释为什么 typeguard 在这种情况下不起作用,我将不胜感激。我想知道是否要在上面写一个问题(错误报告)。
标签: generics typescript