NodeJS Как импортировать файл JS в TypeScript - PullRequest
0 голосов
/ 23 января 2019

Я новичок в TypeScript.В настоящее время я изучаю NodeJS Loopback 4 Framework, который использует язык Typescript.И мой вопрос заключается в том, как импортировать некоторую функцию, класс, который был экспортирован в файл JS в мой файл TS.После поиска несколько способов, но он все еще не работает со мной.Вот пример:

  // /src/index.ts
    import {plus} from './lib/test';

    console.log(plus(1,2));

// /src/lib/test.js
    export function plus(x, y) {
      return x + y;
    }

Я также пытаюсь использовать машинописный текст определения вот так

// /src/lib/test.d.ts
export declare function plus(x: number, y: number): number;

Но все равно получаю ошибку при импорте этой функции в файл index.ts

Ошибка: не удается найти модуль './lib/test' в Function.Module._resolveFilename (module.js: 543: 15)

1 Ответ

0 голосов
/ 23 января 2019

Похоже, что в tsconfig.json не включен 'allowJs', потому что он экспортирует объявления.

Есть ли причина, по которой вы не хотите, чтобы это был машинописный файл? Если вы измените test.js на test.ts, сделав его .ts должен позволить его распознавать в файле индекса.

UPDATE

Полную историю чата, чтобы добраться до этой точки, можно найти здесь . Репозиторий для проверки найден здесь

ОК, так что простое решение, о котором упоминает @ maaz-syed-adeeb, будет работать:

import { path } from './lib/test.js'

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

Чтобы не указывать расширение .js, вы также можете настроить структуру каталогов следующим образом:

src
|- index.ts
|- lib
  |- test.js
  |- test.d.ts
  |- index.[js|ts]

в ./lib/index файл экспортировать все из теста:

//./src/lib/index.[js|ts]
export * from './test'

и затем импортировать все из lib:

// ./src/index.ts
import { path } from './lib'
// or
import { path } from './lib/test.js'

Если вы используете смесь JavaScript и машинописного текста (скажем, вы переходите на машинописный текст с существующей кодовой базой), вам необходимо обновить tsconfig.json, чтобы включить его, чтобы вы не получали предупреждения в своей IDE :

{
  "compilerOptions": {
    "allowJs": true,
    "declaration": false
  }
}

Это так, что ваши файлы JavaScript будут перенесены в каталог назначения вместе с файлами машинописи.

...