如果Component是通过flow-typed键入的第三方模块,则Flow无法正确理解代码

时间:2018-05-22 07:58:28

标签: reactjs flowtype conditional-rendering

更新:2018-05-23

因此,无法复制的原因是,我删除了代码的一些部分(与项目相关的东西)实际上是问题的一部分。

1)我在这个项目中使用了react-router(react-router-dom),并通过添加一个lib(.flowconfig内部的[lib]部分)添加了一些流兼容性,其中我创建了第三方模块定义

文件四react-router:

declare module 'react-router-dom' {
    declare module.exports: any;
}

2)条件渲染包括来自React-Router的组件:

import {Link} from "react-router-dom";

// ....

{this.state.something !== null &&
<li>
    <Link to={`/to/${this.state.something.id}`}>
        {this.state.something.name}
    </Link>
</li>
}

// ....

因此,在这种情况下,流程无法正常工作。

它不是由字符串模板使用引起的,它是由于用作属性引起的,它连接到&#34; flowtype-mock-module&#34;。

更改流式定义to this没有帮助。仍然是同样的问题

使用flowtype并做出反应我经常会安静地面对以下问题。您将如何解决它,或者是否有任何最佳实践来处理以下情况?

反应状态的类型定义:

type SomeType = {
    id: number,
};

type State = {
    something: SomeType | null,
}

和条件渲染场景:

render() {
    return (
        <div>
            {this.state.something !== null &&
                <b>this.state.something.id</b>
            }
        </div>
    )
}

现在流程会告诉我,我无法访问null的id属性但是&#34;某些东西&#34;实际上永远不能为null,所以它必须是SomeType类型。

运行流程将导致类似:

Cannot get this.state.something.id because property id is missing in null [1].

 [1] 17│     something: SomeType | null,
       :
     60│                         </div>
     61│                         {this.state.something !== null &&
     62│                         <b>
     63│                             {this.state.something.id}
     66│                         </b>

0 个答案:

没有答案