以下情景中TS类型该怎么写?

image

如图,A中构造函数接受一个AI类型的data,然后把data的属性都复制到A中,但是在A的实例中访问AI的属性会报错。

至于为什么不直接A implements AI,是因为还有以下需求:

image

业务需求中A是作为一个基类的,通常不直接使用,需要子类继承来使用,如上图的B,C。而B,C也有属于自己的BI,CI(继承于AI)。如果每继承一次A都要implements一次未免也太麻烦了。

阅读 2.9k
1 个回答

你搞错了一件事,类A和接口AI没有任何关系,某个接口不会因为名称正好比某个类结尾多了个I就自动成为那个类的接口。如果你喜欢先定义接口,再实现类,确实是要每次都手动implement——这里指的是把接口的所有属性都手动声明一遍。我建议你直接类继承下来就好了。

举个例子:

class A {
  attr: string
  constructor({ attr }: A) {
    this.attr = attr
  }
}

class B extends A {
  // ...
}

interface A {
  attr: string
}

class A {
  constructor({ attr }: A) {
     this.attr = attr
  }
}

interface B extends A {
  attr2: number
}

class B {
  // ...
}

像第二个例子这样,与类同名的接口才有关系。

推荐问题