Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 流量(类型)不';不尊重我对类属性所做的手动检查_Javascript_Flowtype - Fatal编程技术网

Javascript 流量(类型)不';不尊重我对类属性所做的手动检查

Javascript 流量(类型)不';不尊重我对类属性所做的手动检查,javascript,flowtype,Javascript,Flowtype,例如: class MyClass { foo: ?string; constructor(foo) { this.foo = foo; } doSomething() { if (!this.foo) throw new Error(); console.log('hi'); // if I comment this line, I get no errors! const myFoo: string = this.foo; } } 我得

例如:

class MyClass {
  foo: ?string;
  constructor(foo) {
    this.foo = foo;
  }

  doSomething() {
    if (!this.foo) throw new Error();
    console.log('hi'); // if I comment this line, I get no errors!
    const myFoo: string = this.foo;
  }
}
我得到以下错误:

12:const myFoo:string=this.foo; ^无法将
this.foo
分配给
myFoo
,因为null或undefined与字符串[2]不兼容

你可以现场观看


如您所见,我确实确保设置了
this.foo
。但是,如果在检查之后执行了任何代码,尽管该代码没有执行任何操作,但它会忽略我的检查。

流不允许这样做,因为就其而言,
console.log()
调用可以更改
this.foo
的值,这是正确的。Flow理论上可以是console.log的特例,因为它不喜欢有副作用,但实际上它可以是任何函数调用。如果你想让它起作用,你需要先抓住它的价值

doSomething() {
  const foo = this.foo;
  if (!foo) throw new Error();
  console.log('hi');
  const myFoo: string = foo;
}


因为
foo
变量的类型无法更改,因为它没有在任何地方重新赋值。

流不允许这样做,因为就它而言,
console.log()
调用可以更改
this.foo
的值,这是正确的。Flow理论上可以是console.log的特例,因为它不喜欢有副作用,但实际上它可以是任何函数调用。如果你想让它起作用,你需要先抓住它的价值

doSomething() {
  const foo = this.foo;
  if (!foo) throw new Error();
  console.log('hi');
  const myFoo: string = foo;
}

因为
foo
变量的类型无法更改,因为它没有在任何地方重新赋值。

这是由流的

这也提供了一个示例解决方法

只读变量不一定是不变的。例如,
delete this.foo
不会导致错误(这可能是流中的错误,因为它似乎明显违反了类型,但与重新分配不同-)。

这是由流的

这也提供了一个示例解决方法


只读变量不一定是不变的。例如,
delete this.foo
不会导致错误(这可能是流中的错误,因为它似乎明显违反了类型,但与重新分配不同-)。

谢谢。是的,我担心会发生这样的事情,但希望Flow发现我的
控制台.log
行不会改变任何东西。无论如何,我正试图为我的情况找到一个更好的解决方案(而不是添加一个新变量
const foo=this.foo;
),在我的情况下,这个变量是一个只读变量。我试图更改
foo:?字符串
+foo:?字符串,它告诉Flow这个变量是只读的,但我仍然看到错误。(我猜是因为Flow不知道这个只读符号真的被强制执行了)。谢谢。是的,我担心会发生这样的事情,但希望Flow发现我的
控制台.log
行不会改变任何东西。无论如何,我正试图为我的情况找到一个更好的解决方案(而不是添加一个新变量
const foo=this.foo;
),在我的情况下,这个变量是一个只读变量。我试图更改
foo:?字符串
+foo:?字符串,它告诉Flow这个变量是只读的,但我仍然看到错误。(我猜是因为Flow不知道这个只读符号是真的被强制执行的)。谢谢您的参考。我希望他们将来能解决这个问题。检查中间的调用是否更改了值听起来并不困难。(例如,当我使用IntelliJ搜索变量时,它会显示代码中更改该变量的所有位置)。谢谢您的参考。我希望他们将来能解决这个问题。检查中间的调用是否更改了值听起来并不困难。(例如,当我使用IntelliJ搜索变量时,它会显示代码中更改该变量的所有位置)。