Модули
Экспорт
Экспортная декларация
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」 для подписки.