类构造函数中的TypeScript可选

时间:2018-06-15 23:38:38

标签: typescript

目前正在学习TypeScript。我有一节课:

class ComicBookCharacter {
  protected secretIdentity?: string;
  alias: string;
  health: number;
  strength: number;


  constructor({ alias, health, strength, secretIdentity }) {
    this.alias = alias;
    this.health = health;
    this.strength = strength;
    this.secretIdentity = secretIdentity;
  }
}

class SuperHero extends ComicBookCharacter {
  getIdentity() {
    console.log(`${this.alias} secret name is ${this.secretIdentity}`)
  }
}

const superman = new ComicBookCharacter({
  alias: 'Superman',
  health: 300,
  strength: 60,
  secretIdentity: undefined,
});

我想知道在创建类的实例时是否必须传递undefined如果我将其中一个属性设置为可选(例如此处为secretIdentity);

删除secretIdentity: undefined会给我一个编译错误。

修改

在Shift'N Tab给出的解决方案之后,我做了一些研究,你也可以像这样指定构造函数:

constructor(fields: Partial<ComicBookCharacter> & {
  mothersName?: string,
  secretIdentity?: string,
}) {
  Object.assign(this, fields);
}

正如Shift'N Tab在下面的评论中所写,请不要忘记在"strictPropertyInitialization": true文件中添加tsconfig

2 个答案:

答案 0 :(得分:1)

如果你想在构造函数中创建一个object参数,你可以通过Object destructuring方法做到这一点。

class ComicBookCharacter{
    secretIdentity?: string;
    alias: string = '';
    health: number = 0;
    strength: number = 0;

    constructor(character: { alias: string, health : number, strength : number, secretIdentity?: string }) {
        Object.assign(this, character);
    }

}

答案 1 :(得分:0)

我认为您可以将秘密标识设置为构造函数中的空字符串(secretIdentity ='')。