代码之家  ›  专栏  ›  技术社区  ›  Anders

Typescript泛型参数未正确解析

  •  0
  • Anders  · 技术社区  · 5 年前

    考虑一下,这是一个泛型类

    export class Query<TResult> {
    }
    

    这种类型的扩展类

    export class ListSomeNumbersQuery extends Query<number[]> {
        constructor() {
            super();           
        }
    }
    

    class CqsClient {
        executeQuery<TResult>(query: Query<TResult>): TResult {
            //TODO: implement
        }
    }
    

    使用

    var result = client.executeQuery(new ListSomeNumbersQuery());
    

    VisualStudioIDE不理解结果是数字数组。怎么了?

    编辑:andershejlsberg非常有趣的选择,Typescript是一种类型擦除语言,所以泛型只是编译时的语法。但添加私有财产确实有效

    export class Query<TResult> {
        private _dummy: TResult;
    }
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Daniel user3757731    5 年前

    这是因为您没有使用类型变量 TResult 在查询类中。

    Docs :

    如果你把它改成

    export class Query<TResult> {
      private result: TResult;
    }
    

    它将正确地将结果标识为 number[] {}