Модули TypeScript импортируют эти вещи

внешний интерфейс TypeScript

Ограничения импорта модулей ES6

Сначала рассмотрим конкретный пример:

В проекте Node импортируйте модуль, используя спецификацию CommonJS:

const koa = require('koa')

При переписывании на TypeScript (версия 1.5+) обычно есть два пути:

  • Используйте метод импорта модуля ES6:

    // allowSyntheticDefaultImports: false
    import * as koa from 'koa'
    
  • Используйте синтаксис импорта модуля TypeScript:

    import koa = require('koa')
    

Они в основном эквивалентны, но спецификация ES6 неimport * asСозданный объект модуля имеет несколько ограничений. Согласно спецификации объект модуляНе вызывается и не создается, у него есть только свойства.

Итак, если вы хотите вызвать объект или использовать новый метод вallowSyntheticDefaultImports: falseПри настройке следует использовать второй способ в примере.

Усовершенствования импорта модулей CommonJs/AMD/UMD в версии 2.7

В предыдущих версиях TypeScript обрабатывал модули CommonJs/AMD/UMD так же, как модули ES6, что вызывало некоторые проблемы:

  • Как упоминалось ранее, при импорте модуля CommonJs/AMD/UMD TypeScript видитimport * as koa from 'koa'а такжеconst koa = require('koa')эквивалентно, но с использованиемimport * asСозданный модульный объект не может быть фактически вызван и создан.

  • Точно так же при импорте модуля CommonJs/AMD/UMD TypeScript видитimport foo from 'foo'а такжеconst koa = require('koa').defaultЭквивалентны, но в большинстве модулей CommonJs/AMD/UMD они не экспортируются по умолчанию.

В версии 2.7 TypeScript предоставляет новую опцию--esModuleInterop, направленный на решение вышеуказанных проблем, Когда используется этот параметр и используется модуль CommonJs/AMD/UMD, он импортирует вызываемый или инстанцируемый модуль и указывает, что этот модуль должен быть импортирован по умолчанию:

import koa from 'koa'
const app = new koa()

Импорт модуля — это всего лишь несколько декларативных типов.

При импорте модуля с не относительным путем вы можете увидетьCould not find a declaration file for module 'someModule'ошибка, вы можете установить файл объявления соответствующего модуля или написать файл, содержащийdeclare module 'someModule'Файл декларации.

Фактически, когда мы импортируем модуль:

import koa from 'koa'
// import koa = require('koa')

Он делает только две вещи:

  • импортировать всю информацию о типе модуля;
  • Определение зависимостей времени выполнения.

Когда вы загружаете этот модуль, но не используете его или используете только как тип, модуль будет удален после компиляции.

когда не используется;

import koa from 'koa'

После компиляции:


Только при использовании в качестве типа:

import koa from 'koa'
let k: koa

После компиляции:

var k

При использовании в качестве значения модуль будет сохранен после компиляции:

import koa from 'koa'
const app = new koa()

После компиляции (при условии, что используется commonjs):

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
var koa_1 = __importDefault(require("koa"));
var k = new koa_1.default();

Примечание:__importDefaultдля использования--esModuleInteropМетод создается при выборе опций.

Ссылаться на

  • http://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html
  • https://stackoverflow.com/questions/35706164/typescript-import-as-vs-import-require?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
  • https://basarat.gitbooks.io/typescript/content/docs/project/external-modules.html