typescript 继承扩展属性

标签 typescript object inheritance properties

好吧,我有两个对象用户和参与者的简单继承。

用户定义为


export type userDoc = {
  firstname: string
  lastname: string
  email: string
}

export class User {
  props: userDoc = {
      firstname: "",
      lastname: "",
      email: "", 
      {...}
  }
}

参与者(继承自用户)为

type participantDoc = {
    pseudonym: string
    karma: number
    impact: number
    level: number
    experience: number
  }

export class Participant extends User {
    props: participantDoc = {
      pseudonym: "",
      karma: 0,
      impact: 0,
      level: 0,
      experience: 0
    }
}

现在我希望实现的是在子类中扩展父类的属性。我正在使用 props 因为 mongodb 并且因为以这种方式分配它比 Object.assign() 更安全。

错误 typescript 正在抛出:

TS2416: Property 'props' in type 'Participant' is not assignable to thesame property in base type 'User'.
  Type 'participantDoc' is missing the following properties from type 'userDoc': firstname, lastname, email, and 6 more.

最佳答案

你必须像上课一样扩展 Prop 的类型。

改变

export type participantDoc = {
    pseudonym: string
    karma: number
    impact: number
    level: number
    experience: number
}

export type participantDoc = {
    pseudonym: string
    karma: number
    impact: number
    level: number
    experience: number
} & userDoc

此外,如果您愿意将您的类型声明为接口(interface),您可以这样做:

export interface userDoc {
  firstname: string
  lastname: string
  email: string
}

export interface participantDoc extends userDoc {
    pseudonym: string
    karma: number
    impact: number
    level: number
    experience: number
}

关于 typescript 继承扩展属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61083903/

相关文章:

javascript - Angular:* ngFor在数组更改后不更新 View

javascript - 从对象构造函数外部的函数访问实例

json - Powershell:如何更新/替换 Json 和 XML 对象中的数据和值

c# - 从通用类型继承为接口(interface)

angular - 如何从 ag-grid valueFormatter 调用服务

Angular2路由器保留查询字符串

javascript - 当我的对象内部有数组时,如何创建接口(interface)?

javascript - 对象如何在 JavaScript 中工作

java - OOM中如何设计这个案例

java - 相当于java中扩展final类来添加额外的功能