Поток не понимает код правильно, если Компонент - сторонний модуль, набранный через тип потока

ОБНОВЛЕНИЕ: 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>

0 ответов

Другие вопросы по тегам