考虑一下,这是一个通用类
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());
Visual Studio IDE无法理解结果是数字数组。怎么了?
edit:由Anders Hejlsberg做出的非常有趣的选择,Typescript是一种类型擦除语言,因此泛型仅是编译时语法糖。但是添加私有财产确实有用
export class Query<TResult> {
private _dummy: TResult;
}
答案 0 :(得分:1)
发生这种情况是因为您没有在查询类中使用类型变量TResult
。
来自Docs:
在函数调用中推断T的类型时,我们尝试在x参数上查找T类型的成员,以弄清楚T应该是什么。因为没有使用T的成员,所以没有任何可推断的内容,因此我们返回{}。
如果将其更改为
export class Query<TResult> {
private result: TResult;
}
它将正确地将结果标识为number[]
而不是{}