Вот например:
class Result<T>{
public readonly result;
constructor(result: T){
this.result = result;
}
}
class NumberResult extends Result<number>{
constructor(result: number){
super(result);
}
public ResultPlusOne(){
return this.result + 1;
}
}
Result<T>
- это открытый дженерик, то есть в будущем на месте T должен быть указан другой\типы или типы для того чтобы создавать экземпляры класса.
Если мы захотим, например, на место Т поставить number и создать экземпляр класса
let result = new Result<number>(42)
то компилятор для этого создаст закрытый дженерик который будет выглядеть примерно так, но вы его нигде не увидите:
class Result{
public readonly result;
constructor(result: number){
this.result = result;
}
}
Запись
class NumberResult extends Result<number>
Означает наследование от такого класса Result в котором на место T уже подставлен конкретный тип