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)