typescript - 为什么打字稿在使用逻辑运算符时将联合类型解析为可能的空字符串?
问题描述
我正在尝试使用逻辑运算符来防范空对象。可能为 null 的对象包含一个字符串和一个联合类型作为属性。如果我使用“&&”运算符来检查对象是否不为空,则整个表达式将被评估为另一个允许空字符串的联合类型,并且出现类型不匹配错误。
我已经验证,如果我不使用逻辑运算符,而是使用 IF 语句,则代码可以正常工作,但我想了解为什么它没有按预期解决。
type FooType = 'aaa' | 'bbb' | 'ccc';
interface IFoo {
type: FooType;
id: string;
}
type FooAlias = IFoo;
const fooObject = {type: 'aaa', id: '111'} as IFoo;
const fooObject2: FooAlias = {
id: fooObject && fooObject.id,
type: fooObject && fooObject.type
/* The line above complains:
Type '"" | "aaa" | "bbb" | "ccc"' is not assignable to type 'FooType'.
Type '""' is not assignable to type 'FooType'.ts(2322)*/
};
if 而不是type: fooObject && fooObject.type
我使用type: fooObject? fooObject.type : null
它,因为它似乎正确地不假设它可能是一个空字符串。
解决方案
推荐阅读
- xcode - 寻找责任
- git - 尝试上传大文件后无法推送到 github repo
- android - 为什么 searchview 是一个空对象引用?
- kdb - 如何从 TP 日志文件中删除数据?
- verilog - 当我试图在 modelsim 中进行模拟时,没有对象
- sql - 00936. 00000 - 创建视图时“缺少表达式”
- here-api - 如何获取从 PDE 返回的 LINK_ID 的 gps 坐标
- python-3.x - 为什么 python 中的 create_sheet() 不起作用?
- python - 如何从总体中的两个变量中抽取样本
- javascript - redux 是如何存储数据的?