javascript - Objektet kan eventuellt vara 'undefined' efter validering i TypeScript
Vänligen se följande kod. Har vi en bekväm metod för att övervinna detta?
interface IAnimal {
type?: "animal" | "bird";
body?: {
legs?: number;
};
}
// validate type and body.legs exists
function validator(animal:IAnimal){
if(!animal || !animal.body|| !animal.body.legs){
throw new Error('invalid');
}
console.log(animal.body.legs); // fine here
}
function foo(animal:IAnimal){
validator(animal); // we called validation here
console.log(animal.body.legs);
// ^^^^^^^^^^^ =========> Error: Object is possibly 'undefined'.ts(2532)
}
Jag vet att detta kan lösas med !.
console.log(animal.body!.legs); // fine
Men om detta är en stor funktion, behöver vi använda detta !. genom hela funktionen även efter korrekt validering, vilket inte ser bra ut. Detta är också felbenäget. Finns det något bekvämt sätt att övervinna detta?
Svar #1
Ditt gränssnitt IAnimal, anger att body är nullable, problemet kommer inte från din validator-funktion. Om body och legs är obligatoriska, ange att dessa är obligatoriska.
interface IAnimal {
type?: "animal" | "bird";
body: { // remove nullable mark
legs: number; // ...
};
}
