Модули

Экспорт

Экспортная декларация

export const num = 1;

Заявление об экспорте

// a.js
const num = 1;
const str = 'export';
export { num };
export { str as exportStr }; // export renaming

Экспорт по умолчанию

// b.js
export default function toString(obj) {
  return obj.toString();
}

Реэкспорт

export { num, exportStr } from './a.js'
// equivalent to 
export * from './a.js'

Импортировать

import { num, exportStr } from './a.js';
import * as util from './a.js'

import toString from './b.js';
// equivalent to
import { default as toString } from './b.js'

module в цконфиге

Укажите генерацию кода модуля: «none», «commonjs», «amd», «system», «umd», «es2015» или «ESNext».

Пространство имен

Объявления окружения пишутся с использованием ключевого слова declare и могут объявлять переменные, функции, классы, перечисления, пространства имен или модули.

Амбиентные модули

// node.d.ts
declare module "url" {
  export interface Url {
    protocol?: string;
    hostname?: string;
    pathname?: string;
  }
  export function parse(urlStr: string, parseQueryString?): Url;
}
/// <reference path="node.d.ts"/>
import * as URL from "url";
let myUrl = URL.parse("https://github.com/n0rush");

Сокращенные эмбиент-модули

declare module "new-module"; // All imports from a shorthand module will have the any type.

Объявления модулей с подстановочными знаками

declare module "json!*" {
  export const version: string;
  const value: any;
  export default value;
}

не могу только сделать

import { version } from 'example.json'
import data from 'example.json'
import { data } from 'example.json' // error

Пространства имен производят значения

namespace N {
  let str = "hello world";
  export function fn() {
    return str;
  }
}
N.fn();
N.str;  // Error, str is not exported

Приведенное выше объявление M эквивалентно следующему в скомпилированном коде:

var N;
(function (N) {
  var str = "hello world";
  function fn() {
    return str;
  }
  N.fn = fn;
})(N || (N = {}));
N.fn();
N.str; // Error, str is not exported

Разрешение модуля

import { a } from 'pathOfModuleA';
  • Сначала компилятор попытается найти файл, представляющий импортированный модуль. Для этого компилятор следует одной из двух разных стратегий: Classic или Node, которая указывается с помощью moduleResolution в tsconfig.
  • Если совпадений не найдено и имя модуля не является относительным, компилятор попытается найти объявление внешнего модуля.
  • Неотносительный импорт может быть разрешен относительно baseUrl или путем сопоставления путей. Они также могут разрешаться в объявления внешних модулей. Используйте неотносительные пути при импорте любых внешних зависимостей.

Базовый URL

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

Отображение пути, эквивалентное псевдониму в других инструментах

{
  "compilerOptions": {
    "baseUrl": ".", // This must be specified if "paths" is set.
    "paths": {
      "jquery": ["node_modules/jquery/dist/jquery"] // This mapping is relative to "baseUrl"
    }
  }
}

Уведомление

  • Если вы хотите следить за последними новостями/статьями из серии моих блогов, пожалуйста, 「Watch」 для подписки.