我已经查看了以下所有内容:
第三个是最接近我要查找的内容,但是(不幸的是)答案更多地是针对特定问题的,而不是问题标题的。
(从简单的意义上来说)这是我想做的事情:
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都使用一个字符串作为其构造函数。他们不一定需要扩展一个类,他们可以实现一个接口或其他东西,但是我确实希望能够保存一列需要完全相同的参数来构造的类。
是否可以在TypeScript中使用extends
或implements
来强制执行类构造函数参数类型?
编辑:出现“可能重复”以显示如何无法在界面中为此目的使用new()
。也许还有其他方法。
答案 0 :(得分:0)
您可以对数组本身执行这样的强制执行,因此它将仅允许带有单个字符串参数的构造函数:
class NamedCat {
constructor(name: string) { console.log(`meow I'm ${name}`); }
}
class Shouter {
constructor(phrase: string) { console.log(`${phrase}!!!!!!`); }
}
type ConstructorWithSingleStringArg = new (args: string) => any;
const creatableClasses: Array<ConstructorWithSingleStringArg> = [NamedCat, Shouter];
creatableClasses.forEach(
ctor => new ctor("Sprinkles")
);