max([1])参与加法运算报错,如何使其返回值为可用Number类型?
解决max函数返回值的数值运算类型问题
执行表达式 max([1]) + 1 时触发类型错误:
Unable to call:
+with arguments: (1 | Null,1).
Reasons:
- Expecting Type:
Number, but got:Null.
|-- From:Number
|- From: +(lhs: Number, rhs: Number) -> Number
50| max([1]) + 1
^^^^^^^^- Expecting Type:
Array<T>, but got:Null.
|-- From:Array<T>
|- From: +<T, E>(lhs: Array, rhs: E) -> Array<T | E>
50| max([1]) + 1
^^^^^^^^- 10 more options ...
50| max([1]) + 1
^^^^^^^^^^^^
但运行typeOf(max([1]))返回Number,核心原因是静态类型检查器认为max函数可能返回Null(比如处理空数组时),但实际运行时传入的非空数组让max返回了确定的数值类型。
以下是几种可行的解决方式:
非空断言/类型强制转换:直接告知类型检查器当前
max的返回值不可能为Null,比如使用对应语言的非空语法(如!)或类型断言:max([1])! + 1或者强制转换为Number类型:
Number(max([1])) + 1空值兜底处理:通过逻辑判断或运算符提前处理
Null情况,确保参与运算的是确定的Number类型:(max([1]) ?? 0) + 1这里如果
max返回Null,则用0作为兜底值,保证左侧运算数为Number。标注非空数组类型:如果所用语言支持非空数组类型定义,给传入的数组标注为非空类型,让类型检查器自动推断
max返回值为Number:max([1] as NonEmptyArray<Number>) + 1
内容的提问来源于stack exchange,提问作者Arnett Rufino
相关产品推荐
相关产品推荐

