Объект, возможно, «неопределен» после проверки в TypeScript - PullRequest
2 голосов
/ 14 апреля 2020

Пожалуйста, смотрите следующий код. У нас есть удобный метод для преодоления этого?

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)
}

Я знаю, что это можно решить с помощью !.

console.log(animal.body!.legs); // fine

Но если это большая функция, нам нужно используйте это !. во всей функции, даже после правильной проверки, которая выглядит не очень хорошо. Эта ошибка также подвержена. Есть ли удобный способ преодолеть это?

1 Ответ

0 голосов
/ 14 апреля 2020

Ваш интерфейс IAnimal, устанавливает body, равен nullable, проблема не в вашей функции validator. Если требуются body и legs, установите их.

interface IAnimal {
  type?: "animal" | "bird";
  body: { // remove nullable mark
    legs: number; // ...
  };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...