“ ITestData”可分配给“ IEntityData”类型的约束,但可以使用其他约束子类型实例化“ IEntityData”

问题描述

我有两节课。抽象超类:

export abstract class Entity<IEntityData> {
  protected readonly _source: IEntityData; // TODO: replace with private


  protected constructor(entityData: IEntityData) { this._source = entityData }

  get source(): IEntityData { return this._source }
}

和继承的类:

import { Entity } from './entity/entity';



interface ITestData {
  foo: string;
  bar: number;
}

export class Test<IEntityData extends ITestData = ITestData>
  extends Entity<IEntityData> {
  constructor(testData: ITestData) {
    super(testData);
  }

  get foo(): string { return this.source.foo }
  get bar(): number { return this.source.bar }
}

在构建期间出现错误。我不明白我在做什么错。

src/app/data/models/test.ts:13:11 - error TS2345: Argument of type 'ITestData' is not assignable to parameter of type 'IEntityData'.
      'ITestData' is assignable to the constraint of type 'IEntityData',but 'IEntityData' could be instantiated with a different subtype of constraint 'ITestData'.
    
    13     super(testData);

解决方法

哦,天哪!解决!我只是替换了这个:

constructor(testData: ITestData) {
  super(testData);
}

与此:

constructor(testData: IEntityData) {
  super(testData);
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...