TypeScript. Как проверить является ли входящий параметр функции прототипом определенного класса?

Я пытаюсь создать функцию, которая должна принемать класс (не инстанс класса), который должен быть прототипом базового класса (Base). Когда я пытаюсь узать тип входящего параметра функции как Base, то получаю TypeScript ошибку. Как правильно указать тип входящего параметра функиции combine?

abstract class Base {
  abstract name(): string
}

class SimpleClass extends Base {
  name() {
    return 'Name'
  }
}

function combine(someClass: Base) {
  return {
    className: someClass,
  }
}

// Получаю TypeScript ошибку
combine(SimpleClass)

TypeScript error

TS2345: 
Argument of type 'typeof SimpleClass' is not assignable to parameter of type 'Base'.
Types of property 'name' are incompatible.
Type 'string' is not assignable to type '() => string'.

Ответы (1 шт):

Автор решения: Трипольский Пётр

Я бы сделал это следующим образом

Простите, а зачем вам столько галоперидола...

abstract class Base {
  abstract name(): string
}

class SimpleClass extends Base {
  name() {
    return 'Name'
  }
}

const combine = <T extends Base>(someClass: new () => T) => ({
  className: someClass,
});

combine(SimpleClass)
→ Ссылка