首页 > 解决方案 > 打字稿继承扩展属性

问题描述

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

用户定义为


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
    }
}

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

错误打字稿正在抛出:

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.

标签: typescriptobjectinheritanceproperties

解决方案


你将不得不像在课堂上那样扩展道具的类型。

改变

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

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

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

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

推荐阅读