打字稿:从{}扩展

时间:2019-04-27 03:44:17

标签: typescript

给出:

class A<T extends {
  [k: string]: any
}> {
  private model: T

  constructor(model: T = {}) {
    this.model = model
  }
}

为什么我会指出错误

  

类型'{}'不能分配给类型'T'。

不是{}可分配给

  

{[k:字符串]:任意}

谢谢。

2 个答案:

答案 0 :(得分:1)

这是正确的错误。

您的班级说这段代码是合法的:

string | undefined

但是现在您有了一个type MyType = { a: string; b: number; } const c = new A<MyType>(); ,其A没有必需的modela属性。

答案 1 :(得分:0)

here中描述了此问题。发出的解决方案如下

class A<T extends {
    [k: string]: any
}> {
    private model: T

    constructor(model: T = <T>{}) {
        this.model = model
    }
}

使用构造函数中的类型转换是必不可少的model: T = <T>{}

然后您用cn实例化class A

var instA = new A();
// instA.model will be {}

您还可以阅读this,其中包含有关类似问题的链接和讨论。