Я посмотрел на все следующее:
Третий вариант наиболее близок к тому, что я ищу, но (к сожалению) ответ был больше для конкретной проблемы, а не для заголовка вопроса.
Это (в упрощенном смысле) то, что я хотел бы сделать:
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()
в интерфейсе для этой цели. Возможно, есть еще другие способы.