рассмотрим это, универсальный класс
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: Действительно забавный выбор Андерса Хейлсберга, Typescript - это язык стирания типов, поэтому дженерики - это только синтаксический сахар времени компиляции. Но добавление частной собственности действительно работает
export class Query<TResult> {
private _dummy: TResult;
}