为什么flow在使用instanceof时会发出未覆盖的代码警告?

时间:2018-05-31 13:07:43

标签: javascript string flowtype

Flow在第二个if语句中为str提供了未覆盖的代码警告。

  

[流量覆盖]未覆盖的代码
    (参数)str:never
    [流量]
    str:空

const isStr = (str: string): boolean=> {
  if(typeof str === 'string')
    return true;
  if(str instanceof String)
    return true
  return false
}

但如果if语句被颠倒,它就不会发出任何警告。

const isStr = (str: string): boolean=> {
  if(str instanceof String)
    return true
  if(typeof str === 'string')
    return true;
  return false
}

是因为如果typeof str === 'string'为真,str instanceof String始终为真,但反转并不总是正确的吗?

1 个答案:

答案 0 :(得分:2)

欢迎使用JavaScript对字符串的定义。在你的控制台中试试这个:

String

基本上,在JavaScript中,常规字符串实际上不是string个实例(就像它们在Java中一样),而是字符串原语。因为在你的函数中你明确地将参数声明为str instanceof String(基元),所以第一个条件总是为真,因此第二个条件是死代码。如果你切换它们,sudo yum install 'pkgconfig(pango)'将始终为假,所以第二个条件仍然有效。