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



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



 // @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


Проблема возникает, когда я пытаюсь экспортировать тип из moduleA и импортировать этот тип в 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
548   2  

2 ответов:

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

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

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

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


Кстати, оба

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

И

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

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


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

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

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

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

Comments

    Ничего не найдено.