流:为什么抱怨字符串为空/未定义?

时间:2018-10-18 16:35:12

标签: flowtype

我仍在尝试了解Flow的工作原理,任何人都可以向我解释为什么这个简单的示例会引发错误?

function say(text: string) {
  console.log(text);
}

say('Hello World!'); // This is alright

const text: ?string = 'Hello World!';
say(text); // Error:(219, 5) Cannot call `say` with `text` bound to `text` because null or undefined [1] is incompatible with string [2].

我知道,text变量可以为null,但是到我说say(text)时,它显然不是null。

1 个答案:

答案 0 :(得分:2)

Flow不会跟踪您分配给什么的内容。它仅跟踪变量的类型。而且您正在尝试将类型?string传递给string,这不是有效的分配,因为它可能是null。您知道它不是null,但流程不是因为它实际上没有执行代码。

很难为您提供好的解决方法的建议,因为const text: ?string = 'Hello World!';是一个非常人为的示例,但是如果say有一个text可以调用const text: ?string = 'Hello World!'; if (text) { say(text); } 经过测试是否为非空值。

let a: ?string = 'foo'
let b = a; // flow infers the type of b as ?string

唯一的时间流不会跟踪您为隐式类型进行的变量初始化所分配的内容。但这只是将右手表达式的类型分配为变量的类型。

getprop ro.boot.bootloader >> /tmp/BLmodel
ACTUAL_CSC=`cat /efs/imei/mps_code.dat`
ACTUAL_OMC=`cat /efs/imei/omcnw_code.dat`
SALES_CODE=`cat /system/omc/sales_code.dat`
sed -i -- "s/CSC=//g" /tmp/aroma/csc.prop
NEW_CSC=`cat /tmp/aroma/csc.prop`
buildprop=/system/build.prop