Файлы объявлений Typescript для локальных файлов JS
Я пытаюсь добавить наборы для наших файлов Javascript на работе, пока мы находимся в процессе преобразования в Typescript. Тем не менее, я не могу получить файлы декларации для распознавания.
Вот моя файловая структура
- JS
- foo.js
- типизации
- Foo
- index.d.ts
- Foo
- index.ts
- package.json
- tsconfig.json
foo.js
module.exports = function Foo() {
return 'Bar';
};
index.d.ts
export = Foo;
declare function Foo(): string;
index.ts
import Foo = require('./js/Foo')
console.log(Foo());
tsconfig.json
{
"compilerOptions": {
"typeRoots": ["./typings"],
"target": "es5",
"strict": true,
"baseUrl": "./",
"paths": {
"*": ["typings/*"]
}
}
}
package.json
{
"name": "fail",
"version": "1.0.0",
"description": "",
"main": "index.ts",
"scripts": {
"tsc": "tsc"
},
"author": "",
"license": "MIT",
"dependencies": {
"typescript": "^3.1.4"
}
}
Вот репо, чтобы воспроизвести мою проблему
https://github.com/erisman20/typings_help
Редактировать: вот есть ошибка, которую я получаю
error TS7016: Could not find a declaration file for module './js/Foo.js'. '....../js/Foo.js' implicitly has an 'any' type.
1 ответ
Единственные способы предоставить объявления для относительного импорта, такие как './js/Foo'
должны фактически иметь файл декларации в пути импорта (плюс .d.ts
или же /index.d.ts
) или иметь его практически в пути импорта на основе вашего rootDirs
вариант. ни typeRoots
ни baseUrl
/paths
вступает в игру по этому сценарию: baseUrl
/paths
влияет только на разрешение модуля для "не относительных" путей, и typeRoots
может использоваться для получения TypeScript для загрузки файлов, но никак не влияет на связь между путями импорта и файлами.
Самое простое решение было бы поставить Foo.d.ts
файл в том же каталоге, что и Foo.js
, Если вы хотите сохранить набор текста в отдельном каталоге, вы можете добавить "rootDirs": ["js", "typings"]
в tsconfig.json
, Этого изменения достаточно, чтобы ваш пример работал на меня, хотя я нахожу запутанным наличие соответствующего Foo.js
а также Foo/index.d.ts
файлы и будет поощрять вас быть последовательными в использовании подкаталогов, т. е. либо переключиться на Foo/index.js
на стороне JavaScript или переключиться на Foo.d.ts
на стороне TypeScript.