Поток не понимает код правильно, если Компонент - сторонний модуль, набранный через тип потока
ОБНОВЛЕНИЕ: 2018-05-23
Итак, причина, по которой это не может быть воспроизведено, состоит в том, что я удалил некоторые части кода (связанные с проектом вещи), которые на самом деле являются частью проблемы.
1) В этом проекте я использую реагирующий маршрутизатор (реагирующий маршрутизатор-дом) и добавил некоторую совместимость потоков, добавив раздел lib ([lib] внутри .flowconfig
) где я делаю определения сторонних модулей.
Файл четыре реакции-роутера:
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>
}
// ....
Таким образом, поток перестает работать правильно в таком сценарии.
Это НЕ вызвано использованием строкового шаблона и НИКОГДА не вызвано использованием в качестве атрибута, оно связано с "flowtype-mock-module".
Изменение определения типа потока к этому не помогает. Все та же проблема
работая с flowtype и реагируя, я часто сталкиваюсь со следующей проблемой. Как бы вы решили это, или есть ли лучшие практики для обработки следующего сценария?
Определение типа для реагирующего состояния:
type SomeType = {
id: number,
};
type State = {
something: SomeType | null,
}
и сценарий условного рендеринга:
render() {
return (
<div>
{this.state.something !== null &&
<b>this.state.something.id</b>
}
</div>
)
}
Теперь поток сказал бы мне, что я не могу получить доступ к свойству id со значением NULL, но "что-то" на самом деле никогда не может быть 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>