TS2322:类型“ {}”不可分配给类型“ C&Context”。类型“ {}”不可分配给类型“上下文”。 '{}'可分配给'Context'类型的约束,但是'Context'可以使用约束'object'的另一个子类型实例化。
错误出现在constructor
中,其中我定义了上下文context = {}
的默认值(在解构分配中)
我正在尝试为Page定义通用类型,其默认值为空对象(通用类型也必须是唯一的对象)。
然后,Page构造函数必须接受自定义对象作为构造函数参数中的上下文属性。此上下文的默认值必须为空对象,但提示使用type C
和generic type Context
。
type C = {
isProduction?: boolean;
isTest?: boolean;
};
class Page<Context extends object = {}> {
context: C & Context;
readonly id: number;
readonly name: string;
constructor({ context = {}, id, name, }: { context?: C & Context; id: Page['id']; name: Page['name'] }) {
this.context = context;
this.id = id;
this.name = name;
}
}
答案 0 :(得分:-1)
错误消息很清楚,{}
不能分配给Context
(实际上,extends {}
毫无意义,因为每种类型都可以满足此要求。
如果您希望{}
是有效的默认值,则可以将Context
更改为Partial<Context>
:
type C = {
isProduction?: boolean;
isTest?: boolean;
};
class Page<Context extends object = {}> {
context: C & Partial<Context>;
readonly id: number;
readonly name: string;
constructor({ context = {}, id, name, }: { context?: C & Partial<Context>; id: Page['id']; name: Page['name'] }) {
this.context = context;
this.id = id;
this.name = name;
}
}