首页 > 解决方案 > 在 TypeScript 中验证后对象可能是“未定义”

问题描述

请看下面的代码。我们有没有一种方便的方法来克服这个问题?

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

但是如果这是一个很大的函数,我们需要!.在整个函数中使用它,即使在经过适当的验证之后,这看起来并不好。也容易出现这种错误。有什么方便的方法可以克服这个问题吗?

标签: javascripttypescript

解决方案


你的界面IAnimal,设置bodynullable,问题不是来自你的validator功能。如果bodylegs是必需的,请设置这些是必需的。

interface IAnimal {
  type?: "animal" | "bird";
  body: { // remove nullable mark
    legs: number; // ...
  };
}

推荐阅读