web-dev-qa-db-ja.com

TypeScriptで修正する方法未定義のプロパティ「最初」を設定できません

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

誰かがこれを解決するアイデアを持っていますか?

15
Mustafa Dwekat

nameタイプのオブジェクトに設定する必要がありますName(つまり、そのインターフェイスに一致する形状)。

例えば:

this.name = {
    first: 'John',
    last: 'Doe'
}
5
Ted Nyberg

自由に変更したい場合は、別に[?を使用して、

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」が欠落しています

注:前の答えは進むべき道だと思いますが、これは単なる追加です。

3
Angel Angel