【发布时间】:2019-11-26 18:13:19
【问题描述】:
我有一个声明为两种类型的变量。让我们以此为例:
let foo: number | number[] = null;
之后,我有一个 if 条件,将单个数字或数组分配给该变量:
if(condition) {
foo = 3;
} else {
foo = [1,2,3];
}
问题从这里开始。如果我需要像检查它是否是一个数组一样检查它,我无法对该变量执行任何操作。
if(!!foo.length) { ... }
这给了我一个错误:
类型编号中不存在属性“长度”|数字 []。
我已将此主题设为红色:https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards,但我无法使其正常工作。我也在 SO 上搜索了这里,但没有找到任何可以帮助我的东西。
我已经解决了硬铸造它as any 并且它有效,但不是一个优雅的解决方案。
我错过了什么?
if(!!(foo as number[]).length) {
// this works if foo is an array
} else {
// this works too and I can just do something like const a:number = foo;
}
【问题讨论】:
-
可能是错字?
length -
@saintlyzero 很遗憾没有,我只是在示例中打错了。
标签: angular typescript