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