/* @flow */
class Foo {
blah: string;
bar: string;
constructor(blah: string, bar?: string) {
this.blah = blah
if (bar) {
this.bar = bar
}
}
}
const foo = new Foo('okok')
foo.bar
这不会引发一个flowtype错误?
修改
这可能会回答我的问题......
https://flowtype.org/docs/nullable-types.html#undefined-values-and-optional-types
未定义的值和可选类型未定义的值,就像null一样, 也可能导致问题。不幸的是,未定义的值无处不在 在JavaScript中,如果没有严重影响,很难避免它们 语言的可用性。例如,数组可以有孔 要素;可以动态添加和删除对象属性。流 忽略了由object属性导致的未定义的可能性 和数组元素访问。更严格会迫使程序员 对每个取消引用进行未定义的检查(如空检查) 数组元素或对象属性,以完成任何有用的工作。
但是,Flow会检测未定义的局部变量并返回值, 并且它可能考虑可选参数和属性 未定义。因此,必须通过未定义来保护这些类型的使用 检查以避免错误。
答案 0 :(得分:2)
Flow
目前无法确保(v0.36)类字段class Foo {
bar: string;
}
new Foo().bar // no error
答案 1 :(得分:0)
从0.47
开始,流正确地捕获了这些错误(可能是某些早期版本)。
作为一个警告,如果你扩展一个流不理解的类,它将不会捕获这些错误。
// @flow
import Model from './Model'; // a non-flown file
class A extends Model {}
const a = new A();
a.bar; // will not fail, because Model might have a bar field.