const numbers = [5, 3, 22, 2, 6];
let max: number;
numbers.forEach(item => {
if (!max || item > max) max = item;
});
console.log(max++); // type error
我可以确定max
将在max++
表达式之前初始化为数字。但Flow无法自动推断出这一点,所以它会抱怨。
我想在forEach之后对Flow说:请假设max
变量现已初始化。有没有办法做到这一点?
(相关 - Flow有'声明':declare var max: number;
- 这可以让您声明全局范围内存在名为var
的数字变量。但您无法使用它重新声明已经在你自己的范围内宣布的东西。)
答案 0 :(得分:1)
您可以按SELECT x.serviceNumber
FROM your_table t
CROSS JOIN
XMLTABLE(
XMLNAMESPACE( 'http://www.yourserver.url/json/' AS "json" ),
'//root/Input/Body/json:object/json:array/json:object/'
PASSING XMLTYPE(
'<?xml version="1.0" encoding="utf-8"?>' ||
'<root xmlns:json="http://www.yourserver.url/json/">' ||
t.your_xml_column ||
'</root>'
)
COLUMNS serviceNumber NUMBER PATH './json:string[@name="serviceNumber"]'
) x
初始化最大值。这应该可以阻止投诉。
答案 1 :(得分:1)
您也可以用不太可变的方式重写代码:
const numbers = [5, 3, 22, 2, 6];
const max = numbers.reduce((max, item) => item > max ? item : max,
Number.NEGATIVE_INFINITY);
console.log(max + 1);
这可以避免任何类型的突变,使Flow的生活更轻松(也可能对人类而言:))