类泛型可分配问题

时间:2019-08-27 09:37:33

标签: javascript typescript

错误

  

TS2322:类型“ {}”不可分配给类型“ C&Context”。类型“ {}”不可分配给类型“上下文”。 '{}'可分配给'Context'类型的约束,但是'Context'可以使用约束'object'的另一个子类型实例化。

错误出现在constructor中,其中我定义了上下文context = {}的默认值(在解构分配中)

我在做什么?

我正在尝试为Page定义通用类型,其默认值为空对象(通用类型也必须是唯一的对象)。

然后,Page构造函数必须接受自定义对象作为构造函数参数中的上下文属性。此上下文的默认值必须为空对象,但提示使用type Cgeneric 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;
  }
}

1 个答案:

答案 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;
  }
}