eslint-plugin-import как добавить модули, объявленные потоком, в исключения

У меня есть файл в каталоге потокового типа с некоторыми общими объявлениями типа, например:

common-types.js

// @flow

declare module 'common-types' {
  declare export type RequestState = {
    setLoading: () => void,
    setFinished: () => void,
    setError: (error: AxiosFailure) => void,
    reset: () => void,
    status: LoadingStatus,
    error: AxiosFailure | void,
  };

  declare export type LoadingStatus = '' | 'loading' | 'finished';

  declare export type ErrorObject = { [key: string]: string | string[] | Error };

  declare export type AxiosFailure = {
    status: number,
    data: ErrorObject,
  }

}

Теперь импортирую в файлы вот так:

import type { RequestState } from 'common-types';

но я получаю ошибки импорта eslint-plugin-import о отсутствующем расширении файла, а также не могу разрешить путь к модулю 'common-types'

Как мне с этим справиться?


person Tomasz Mularczyk    schedule 30.08.2017    source источник
comment
common-types на самом деле модуль npm? Похоже, было бы проще сделать его локальным файлом, а затем сделать ./common-types, если вы на самом деле не объявляете типы реального модуля npm.   -  person loganfsmyth    schedule 31.08.2017
comment
это не модуль. Я хотел избежать длинного импорта, такого как ../../../../../common-types. Если я сделаю псевдоним webpack, снова поток показывает ошибки о том, что модуль не найден.   -  person Tomasz Mularczyk    schedule 31.08.2017
comment
Обычно, если вам приходится это делать, это признак того, что ваша файловая структура не очень хорошо продумана. Ваши типы должны просто передавать ваш код вместе с вашими данными, поэтому, если вы экспортируете функцию, которая возвращает тип, также повторно экспортируйте тип из этого модуля. Если вы импортируете функцию, возвращающую тип, скорее всего, вы сможете импортировать тип из того же модуля.   -  person loganfsmyth    schedule 31.08.2017
comment
Проблема возникает, когда я использую псевдонимы webpack. Чтобы поток не вызывал ошибку при импорте компонентов из commons, я должен игнорировать его в потоке, набранном declare module 'common' { declare module .exports: any; } , но тогда, если бы я попытался экспортировать типы оттуда, я бы не получил ошибок при экспорте несуществующих типов. , потому что это игнорируется.   -  person Tomasz Mularczyk    schedule 31.08.2017
comment
@loganfsmyth благодарит за ваши предложения. Почти сдавшись, я попробовал другой подход, и теперь он работает.   -  person Tomasz Mularczyk    schedule 31.08.2017
comment
Я лично считаю, что переписывание путей с помощью псевдонимов - это запах кода, но, в конце концов, это ваш выбор.   -  person loganfsmyth    schedule 31.08.2017


Ответы (1)


Я нашел решение. Как @logansmyth предложил в комментарии

Ваши типы должны просто передавать ваш код вместе с вашими данными

У меня была проблема с псевдонимами webpack. Flow указал мне на ошибки, связанные с неустановленными модулями. Hovewer Я обнаружил, что могу использовать картографы в .flowconfig как:

module.name_mapper='^common' ->'<PROJECT_ROOT>/src/common'

вместе с псевдонимами webpack, что делает eslint-plugin-import и flow счастливыми, а также правильную проверку типов. Теперь я импортирую типы вместе с common компонентами, не связываясь с каталогом потокового типа.

person Tomasz Mularczyk    schedule 31.08.2017
comment
Было бы здорово, если бы вы могли показать немного больше кода конфигурации, я не могу полностью понять, что вы в итоге сделали. - person fraxture; 24.05.2018
comment
@fraxture относится к этой проблеме GitHub github.com/trayio/babel-plugin -webpack-псевдоним / issues / 49. Вот откуда у меня решение. - person Tomasz Mularczyk; 24.05.2018