【发布时间】:2019-03-30 01:11:09
【问题描述】:
考虑一下,一个泛型类
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 不理解 result 是一个数字数组。怎么了?
edit:Anders Hejlsberg 的选择非常有趣,Typescript 是一种类型擦除语言,因此泛型只是编译时语法糖。但是添加私有属性确实有效
export class Query<TResult> {
private _dummy: TResult;
}
【问题讨论】:
-
如果您向
Query添加属性,问题会消失吗?如果是empty you might have problems -
更具体地说,添加
TResult类型的属性属性或在类中以任何方式使用TResult。未使用的泛型并不重要。这样它就可以工作了:export class Query<TResult> { private __justForTs!: TResult; } -
只是一个标记抽象基类
-
它用于标记后端服务将从无抽象类返回的内容,正如您在我的问题中看到的那样
标签: typescript typescript-generics