目前正在学习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
答案 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 ='')。