我想在Typescript类中实现“特征”(如PHP)功能。我以为下面的代码可以工作,但不能。我不知道为什么对我来说有意义。
interface Trait {
register: (Model: BaseModel, option?: object) => void
}
interface IPrototype {
prototype: any;
}
class Tenable implements Trait {
register(Entity: BaseModel & IPrototype, option = {}) {
Entity.prototype.hello = function () {
console.log('Hello World from Tenable!');
}
}
}
class BaseModel {
protected traits: Trait[] = [];
}
class A extends BaseModel {
protected traits = [Tenable];
}
如果在Typescript Playgound中运行此代码,则会看到错误。 Typescript Playground
答案 0 :(得分:1)
这意味着Trait
个对象的数组。
protected traits: Trait[] = [];
但是在这里,您创建了一个带有Trait
对象构造函数的数组。
protected traits = [Tenable];
要获取构造此类对象的构造函数的列表,您需要更改特征类型。
protected traits: (new () => Trait)[] = [];
答案 1 :(得分:1)
如果您想要一个Trait
数组(类)
您可以将Trait
从接口更改为抽象类
abstract class Trait {
register: (Model: BaseModel, option?: object) => void;
}
然后使用typeof
class BaseModel {
protected traits: Array<typeof Trait> = [];
}