ESLint жалуется, что объявление типа TypeScript использует тип до того, как оно было объявлено - PullRequest
0 голосов
/ 16 ноября 2018

Я создаю конструктор с типами, способ, которым я объявляю тип:

export type BuilderInterface<T> = {
  [key in keyof T]: (arg: T[key]) => BuilderInterface<T> } & {
  build(): T
}

При запуске ESLint жалуется, говоря: "BuilderInteface" was used before it was defined (no-use-before-define).Что является нормальным, поскольку мне нужно утверждать, что каждый аргумент функции возвращает построитель одного и того же вида.

Какими способами я должен объявить это, не нарушая правила eslint?Должен ли я игнорировать правило напрямую?Почему?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

ESLint (своего рода) правильно, потому что технически вы не объявили тип и используете его. Рекурсивные типы довольно сложны в обращении. Попробуйте использовать TSLint, чтобы увидеть, получите ли вы лучший результат, так как он лучше понимает TypeScript.

Команда TypeScript довольно хорошо разбирается в рекурсивных типах, поэтому это допустимый тип.

Отключите правило или создайте исключение, чтобы инструменты позволили вам продолжить работу!

0 голосов
/ 16 ноября 2018

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

PS Вышесказанное теоретически ... По какой-то причине ваш тип работает для меня (без tslint, просто ts).Я думаю, что новые версии TS справляются с этим хорошо.Проверьте это: https://github.com/Microsoft/TypeScript/issues/3496#issuecomment-128553540

PPS Я только что заметил, что вы говорите о JSLint, а не TSLint.JSLint, конечно, не очень хороший инструмент для проверки кода TS.Вместо этого попробуйте TSLint.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...