Я посмотрел на все следующее:
Абстрактный тип конструктора в TypeScript
Как `конструктор типов = Function & {prototype: T}` применяется к типам конструктора Abstract в TypeScript?
Конструктор Abstract для класса Abstract в TypeScript
Третий - самый близкий к тому, что я ищу, но (к сожалению) ответ был больше для конкретной проблемы и меньше для названия вопроса.
Это (в упрощенном смысле) то, что я хотел бы сделать:
abstract class HasStringAsOnlyConstructorArg {
abstract constructor(str: string);
}
class NamedCat extends HasStringAsOnlyConstructorArg {
constructor(name: string) { console.log(`meow I'm ${name}`); }
}
class Shouter extends HasStringAsOnlyConstructorArg {
constructor(phrase: string) { console.log(`${phrase}!!!!!!`); }
}
const creatableClasses: Array<typeof HasStringAsOnlyConstructorArg> = [NamedCat, Shouter];
creatableClasses.forEach(
(class: typeof HasStringAsOnlyConstructorArg) => new class("Sprinkles")
);
В приведенном выше примере вы можете видеть, что Shouter и NamedCat оба используют одну единственную строку для своего конструктора,Им необязательно расширять класс, они могут реализовывать интерфейс или что-то еще, но я действительно хочу иметь возможность хранить список классов, для построения которых требуются точно такие же аргументы.
Возможно ли этодля принудительного применения типов параметров конструктора классов с помощью extends
или implements
в TypeScript?
РЕДАКТИРОВАТЬ: Появляется «Возможный дубликат», чтобы показать, как нельзя использовать new()
в интерфейсе для этой цели,Возможно, есть и другие способы.