JirkaDellOro / Softwaredesign

Modul "Softwaredesign": Lektionen und Übungsaufgaben
12 stars 12 forks source link

Ein Custom-Object mit null instanziieren #33

Open manuel-pross opened 4 years ago

manuel-pross commented 4 years ago

Hallo @JirkaDellOro

Keine Ahnung ob es am Linter oder an TS selber liegt, aber ich schaffe es nicht ein Object, mit Null zu instanziieren. Ich habe hier eine Methode, die mir ein Object vom Type Item zurückliefert (bzw den Pointer). Am Anfang der Methode erstelle ich eine Variable des selben Typs, die ich gerne am Ende der Prozedur returnen möchte. Je nach durchlaufenem case existiert so ein Item und es wird in die Variable gespeichert, oder es existiert nicht und es wird Null returned.

public removeItem(_itemName: string): Item {
    let removedItem: Item = null;
    for (let i: number = 0; i < this.items.length; i++) {
        if (_itemName.toUpperCase === this.items[i].name.toUpperCase)
            removedItem = this.items.splice(i, 1)[0];
    }
    return removedItem;
}

Warum kann ich das removedItem in der zweiten Zeile nicht auf Null setzen?

Hier der entsprechende Fehler: Type 'null' is not assignable to type 'Item'.

Ich war bisher der Meinung, dass jedes Object den Wert Null, also nicht instanziiert haben kann.

Beste Grüße Manuel

cornelius-99 commented 4 years ago

Wenn du als Rückgabewert Item angibst muss auch ein Item zurückgegeben werden. Wenn auch null zurückgegeben werden darf, kannst du entweder in der tsconfig die nullchecks (oder wie das heißt) ausschalten oder du sagst der Funktion, dass sie auch null zurückgeben kann. Das geht mit:

function test():Item|null{...}