Как импортировать JS в TS с noImplicityAny и без allowJs - PullRequest
2 голосов
/ 22 апреля 2019

Я использую Webpack и @babel/typescript для компиляции смешанного проекта TypeScript и JavaScript.

Я использую --noImplicitAny, чтобы поощрять использование возможности печатать.

Я не использую --allowJs, потому что мой проект настолько велик, что он забивает компилятор TypeScript и разрушает подсветку Visual Studio / Intellisense.

Для нетипизированных модулей npm, если у меня нет времени на добавление типографий, я создаю файл определения, чтобы явно установить его тип на any. Например

example.ts

import * as elemDataset from 'elem-dataset';

эль-dataset.ts

declare module 'elem-dataset';

Это удовлетворяет компилятору. Но для внутренних модулей я еще не преобразовал в TS ...

import * as example from './example2';  // Where example2 is example2.ts

Я получаю эту ошибку:

Не удалось найти файл объявления типа для модуля './example2'. C: /blah/blah/blah/example2.js неявно имеет тип 'any'.

Я пытался добавить объявление типа, как в этот ответ .

example2.d.ts

declare var example2: any;

declare module "example2" {
    export = example2;
}

Но тогда я получаю эту ошибку:

Файл C: /blah/blah/blah/example2.d.ts не является модулем.

Я также пытался declare module '*'; за этот ответ , но я получил ту же ошибку, что и выше.

Как я могу явно установить тип импорта внутреннего файла JS на любой?

1 Ответ

3 голосов
/ 22 апреля 2019

Оказывается, этого достаточно для моих нужд:

// @ts-ignore
import * as x from './example2';

Сначала я не пробовал, потому что думал, что комментарий отключит проверку типов для всего файла.

Но использование @ts-ignore непосредственно перед импортом позволяет мне применять проверку типов для остальной части проекта, игнорируя при этом один файл JavaScript, пока у меня не будет времени для его преобразования.

...