first
インターフェイスで定義されているサブプロパティName
を設定しようとしていますが、そうすると常にエラーが発生します:
interface Name{
first: string,
last:string,
}
class Person{
private name:Name
public setName(firstName, lastName){
this.name.first = firstName;
this.name.last = lastName;
}
}
var person1 = new Person();
person1.setName('Tracy','Herrera');
実行するとエラーが発生します:Cannot set property 'first' of undefined
誰かがこれを解決するアイデアを持っていますか?
nameタイプのオブジェクトに設定する必要がありますName(つまり、そのインターフェイスに一致する形状)。
例えば:
this.name = {
first: 'John',
last: 'Doe'
}
自由に変更したい場合は、別に[?
を使用して、
interface Name{
first?: string;
last? : string;
}
class Person{
private name:Name
public setName(firstName: string, lastName: string){
this.name = { first: firstName, last: lastName };
}
public setNameSample(firstName: string){
this.name = { first: firstName };
}
public setNameSample1(lastName: string){
this.name = { last: lastName };
}
}
上記の場合、?
を使用しないと、たとえばsetNameSample
のみを設定する必要がある場合など、first
のようなものが得られます。
タイプ '{最初:any; } 'は、タイプ' Name 'に割り当てることができません。プロパティ「last」が欠落しています
注:前の答えは進むべき道だと思いますが、これは単なる追加です。