我正在开发一个允许/启用“插件”的“管理器”类。每个插件将(可选)增加管理器类的
data
成员。
// manager.ts
interface Data {
// some props
}
class Manager {
data: Data;
// TSC Problem: "Property 'data' has no initializer and is not definitely assigned in the constructor."
constructor() {
// can not set all possible properties of this.data because
// the Manager class doesn't know what all will be plugged in
}
}
插件获取对其插入的类实例的引用。它们还可以增强
Data
的接口以更好定义数据对象?
// plugins/A.ts
interface Data {
// additional props
}
function A(boss: Manager) {
// "A" adds data to boss.data that is unique to "A"
}
这些是我认为的问题:
我读到了有关声明合并的内容(https://www.typescriptlang.org/docs/handbook/declaration-merging.html),这听起来像是我的情况下的最佳选择,因为会有许多插件都是独立的并且受歧视的工会(https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types)可能很快就不再是问题了。
编辑:也许我的问题不清楚;是否可以跨多个文件使用声明合并?
您收到错误消息是因为您在将
data
属性标记为类型 Data
时没有为其赋值。您可以通过构造函数设置该值:
interface Data {
name: string;
}
class Manager {
public data: Data;
constructor(data: Data) {
this.data = data;
}
}
并创建这样的对象:
const boss: Manager = new Manager({ name: "boss" });