javascript - 在 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
但是如果这是一个很大的函数,我们需要!.
在整个函数中使用它,即使在经过适当的验证之后,这看起来并不好。也容易出现这种错误。有什么方便的方法可以克服这个问题吗?
解决方案
你的界面IAnimal
,设置body
是nullable
,问题不是来自你的validator
功能。如果body
和legs
是必需的,请设置这些是必需的。
interface IAnimal {
type?: "animal" | "bird";
body: { // remove nullable mark
legs: number; // ...
};
}
推荐阅读
- curl - 使用 CURL 进行 OAuth 的语法格式错误
- node.js - 如何将 JWT 与 redis 的刷新令牌一起使用?丢失的
- python - 是否可以在 Keras 神经网络的顺序模型中计算层的梯度?
- r - 使用 mutate 从字符向量创建多个变量
- ada - => 在 Ada 中是什么意思?
- c# - 尝试以非授权用户身份提交表单时出现问题
- angular - 显示来自另一个 HTML 元素中的一个元素的自定义指令的结果
- java - 我如何从超类中检测对象
- c# - 为什么IStringLocalizer依赖注入在执行时会抛出错误
- cucumber-java - 有没有办法对场景和步骤进行编号?