Как сочетаются наследование и дженерики?
Вот например:
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 уже подставлен конкретный тип
Обычное джаваскриптовое наследование, че тут еще искать, сам же сказал, что знаешь, что такое extends