Импорт собственных JavaScript модулей в преобразованный TypeScript - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь преобразовать существующую кодовую базу JavaScript в TypeScript по одному файлу за раз. Проблема с импортом.

Преобразование:

// JavaScript
const AWS = require("aws-sdk");

в:

// TypeScript
import AWS = require("aws-sdk");

работает, так как AWS SDK установлен в node_modules. Когда я пытаюсь import один из моих собственных модулей, конвертируя:

// This works, but is it "correct"? Path here is relative to compiled .js file
const C = require('../utils/constants');

в:

import C = require('../utils/constants');

, происходит сбой с Cannot find module '../utils/constants'.ts(2307).

Для контекста Вот пути соответствующих файлов (все пути, относящиеся к проекту root):

  1. Файл модуля, который я пытаюсь использовать: utils/constants.js
  2. Оригинал .js файл: utils/sesUtil.js
  3. Эквивалент .ts файл: src/utils/sesUtil.ts (это то, что мы обсуждаем здесь)
  4. Скомпилировано .js файл: dist/sesUtil.js

Приводит меня к некоторым вопросам:

  1. Как правильно импортировать мои собственные (общие JS) JavaScript модули?
  2. Должен ли путь быть относительно того, где существует файл .ts (src/utils/ses.ts) или относительно того, где скомпилированный файл .js будет go (dist/ses.js)?

Вот мой файл tsconfig.json:

{
    "compilerOptions": {
        "module": "commonjs",
        "esModuleInterop": true,
        "target": "es6",
        "noImplicitAny": true,
        "moduleResolution": "node",
        "sourceMap": true,
        "outDir": "dist",
        "baseUrl": ".",
        "paths": {
            "*": [
                "node_modules/*",
                "src/types/*"
            ]
        }
    },
    "include": [
        "src/**/*"
    ]
}

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

По поводу проблем с путем. Убедитесь, что вы установили как минимум свойства rootDir и outDir - reference .

- rootDir - указывает каталог входных файлов root. Используйте только для управления структурой выходного каталога с помощью --outDir.

- outDir - перенаправить структуру вывода в каталог.

Например, у вас есть исходный файл в src/animal/Dog.ts. Оно появится в dist/animal/Dog.js со следующей настройкой:

"rootDir": "src",
"outDir": "dist"

include поле также должно быть установлено, как описано здесь . Это обычные шаблоны UNIX для файлов, включаемых для компиляции. Вы также можете использовать files, но files предназначен для включения точного файла, это не шаблон глобуса. Поэтому сообщество предпочитает использовать include.

Относительно require в коде TypeScript. Желательно вообще забыть о require (кроме некоторых крайних случаев). Если вы хотите импортировать что-либо из модуля, используйте:

import * as MyModule from './MyModule';
import MyModule from './MyModule';
0 голосов
/ 30 апреля 2020

Замена для:

const C = require('../utils/constants');

:

import * as C from '../utils/constants';

Относительно путей импорта - относительно файла, в который вы импортируете, или относительно каталога root проекта, я решаю на основе контекста.

  1. Являются ли эти 2 файла частью одной реализации и могут ли они перемещаться вместе (например, в новую папку)? Затем используйте ../ пути относительно друг друга.
  2. Является ли файл, который я импортирую, частью отдельной единицы / реализации? Затем используйте путь из каталога root (например, src/...).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...