Как решить ошибку «Не удалось найти файл декларации для модуля» с помощью моего собственного файла декларации? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть тестовый проект, в котором я тестирую файлы определения типа. В проекте есть один файл с именем index.ts, который выглядит следующим образом:

import i18nFu = require("gettext.js");

gettext . js пакет был установлен с использованием Node.js следующим образом: npm install gettext.js

VS Code отображает следующее сообщение об ошибке для строки выше:

Не удалось найти файл объявления для модуля 'gettext. js'.

'SOME_PATH / gettext. js 'неявно имеет тип' any '.

Попробуйте' npm install @ types / gettext. js ', если он существует, или добавьте новый файл объявления (.d.ts). содержащий "Объявить модуль 'gettext. js';"

Установка модуля @types/gettext.js устраняет проблему. Но мне любопытно, поэтому я не остановился на этом. Я снова удалил модуль @types/gettext.js и попытался создать файл объявления самостоятельно.

Я создаю подпапку с именем types/gettext.js в папке моего проекта и скопировал в нее содержимое старой папки node_modules/@types/gettext.js. Я также добавил запись typeRoots в свой файл tsconfig.json, чтобы он выглядел так:

{
    "compilerOptions": {
        "lib": ["ES2017"],
        "module": "commonjs",
        "strict": true,
        "target": "es5",
        "typeRoots": ["./types", "./node_modules/@types"],
    },
    "files": ["test.ts"]
}

Но сообщение об ошибке не исчезнет. Замена содержимого файла types/gettext.js/index.d.ts (, который вы можете увидеть здесь ) на declare module 'gettext.js' (как указано в сообщении об ошибке) действительно устраняет ошибку. Но это не решение для наличия типов. Чего мне не хватает?

PS: Меня не интересует работа с хакерскими решениями, такими как ts-ignore или настройка noImplicitAny на false.

1 Ответ

0 голосов
/ 19 апреля 2020

Я решил проблему, установив опцию компилятора baseUrl. Интересно, что теперь мне не нужна опция typeRoots для успешной компиляции и запуска. Это новый tsconfig.json файл:

{
    "compilerOptions": {
        "lib": ["ES2017"],
        "module": "commonjs",
        "strict": true,
        "target": "es5",
        "baseUrl": "./types"
    },
    "files": ["tests.ts"]
}

Надеюсь, это поможет кому-то столкнуться с той же проблемой.

...