Файлы объявлений Typescript для локальных файлов JS - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь добавить наборы для наших файлов Javascript на работе, пока мы находимся в процессе преобразования в Typescript. Однако я не могу получить файлы декларации для распознавания.

Вот моя файловая структура

  • JS
    • foo.js
  • типизация
    • Foo
      • index.d.ts
  • 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 Ответ

0 голосов
/ 31 октября 2018

Единственные способы предоставить объявления для относительного импорта, такие как './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.

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