如何让这个Typescript typeguard在泛型类型的上下文中工作?

时间:2017-02-10 14:59:37

标签: generics typescript

下面的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
    }
}

这是一个愚蠢的例子,我提取以专注于问题;如果一个真实的背景会有所帮助,请告诉我。

1 个答案:

答案 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
    }
}

希望这有帮助。