Подтвердить что ты не робот

Flowtype - как экспортировать и импортировать типы?

Я следил за https://flow.org/en/docs/install/, и поток работает отлично при использовании в отдельных файлах, например:

 // @flow 

type NumberAlias = number;

const n: NumberAlias = "123";

Поток будет правильно указывать, что:

  5: const n: NumberAlias = "123";
                            ^^^^^ string. This type is incompatible with
  5: const n: NumberAlias = "123";
              ^^^^^^^^^^^ number

Проблема возникает, когда я пытаюсь экспортировать тип из модуля А и импортировать этот тип в moduleB:

(moduleA.js)

// @flow 

export type NumberAlias = number;

(moduleB.js)

// @flow

import type { NumberAlias } from './moduleA';

const n: NumberAlias = 123;

Поток жалуется:

src/moduleB.js:3
  3: import type { NumberAlias } from './moduleA';
                                      ^^^^^^^^^^^ ./moduleA. Required module not found

Разве это не так, как описано в https://flow.org/en/docs/types/modules/?

Структура папок:

src/
    moduleA.js
    moduleB.js
.flowconfig
package.json
4b9b3361

Ответ 1

Это сработало так, как вы ожидали, когда я его установил, используя два файла, предоставленные в папке src под моим корнем проекта. moduleB.js:

Ошибка потока

Если я не могу поставить // @flow в Module A, компилятор рассматривает NumberAlias как any и не может жаловаться. Сначала я забыл добавить его, и это бросило меня на несколько минут.

Единственный способ найти ошибку "moduleA not found" - изменить расширение файла (или имя файла) для модуляA. Например, если файл называется moduleA.ts, ModuleA.js или просто moduleA, импорт не будет разрешен, как указано выше.


Кстати, оба

import type { NumberAlias } from './moduleA';

и

import type { NumberAlias } from './moduleA.js';

В моей локальной среде очень просто решить. Вы можете попробовать второй формат?


При условии соблюдения этих условий:

  • Оба файла живут в одной папке
  • Оба имеют расширение .js (или .jsx)
  • Имена файлов соответствуют операторам импорта точно
  • Оба содержат комментарий // @flow

Код, который вы предоставили, работает с использованием потока 0.57.3 с Node 8.7.0. В свете сообщения об ошибке я бы предложил тройную проверку имен файлов и расширений.

Ответ 2

В качестве обходного пути можно поместить все типы в файл anyname.js и поместить его в каталог flow-typed. Тогда все типы будут экспортироваться автоматически, без import.