Урезанная демонстрация - GitHub
В настоящее время у нас есть проект create-react-app, который претерпевает постепенную миграцию с Flow на Typescript. Это означало отключение некоторых нежелательных правил ESLint. Чтобы настроить ESLint, я добавил EXTEND_ESLINT=true
в .env
файл.
Перед добавлением этого параметра мой код Typescript компилируется нормально. Впоследствии я получаю ошибки синтаксического анализа некоторых (но не всех) грамматик Typescript.
// Type guards
export function f0<T>(x: T|undefined): x is T { ...
// Constrained generics
export function f1<T extends number>(x: T) { ...
// Type assertions
... return x as T
Могут быть и другие нераспознанные синтаксисы, которых я еще не нашел.
Пока
Я не обнаружил подобных проблем или отчетов об ошибках. Я понимаю, что некоторые функции Typescript недоступны в текущей версии CRA, например
const enum
, но я не нашел упоминания о функциях, перечисленных выше. Я также почти уверен, что мои версии Typescript и ESLint совместимы сtypescript-eslint
.Я пробовал много разных
.eslintrc
комбинаций. Я оставил несколько наиболее многообещающих в файле.eslintrc.js
в прилагаемом репозитории. Текущая настройка - это один рекомендовано create-react-app, где в разделеoverrides
настраивается линтинг Typescript.Конфигурация ESLint Typescript была настроена в соответствии с инструкциями из
typescript-eslint
monorepo a>, в частности,typescript-eslint/parser
и _ 11_
Решения
Катапультирование - это не вариант. Если не удается найти другого решения, я бы предпочел просто выполнить преобразование Flow -> TS за один раз.
В настоящее время мы расширяем нашу конфигурацию CRA с помощью customize-cra. Решения, связанные с этим, приветствуются.
Мне нравится гибкость, которую дает мне
.eslintrc
, но я счастлив покончить с ней, при условии, что я все еще могу устанавливать правила линта.
Примечания
Я включил
customize-cra
в демонстрационный репозиторий, чтобы точно отразить наш проект, но проблема сохраняется безcustomize-cra
, что указывает на то, что это, скорее всего, не виноват.См.
src/components/TestComponent/fn.ts
, где приведены примеры синтаксиса проблемы.Моя текущая гипотеза состоит в том, что в конфигурации CRA ESLint есть некоторые настройки, которые не переносятся, когда
EXTEND_ESLINT=true
.
Обновления
- Я открыл проблему в create-react-app
- Указано частичное решение проблемы. Все еще не идеально.