更新: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>