TypeScript
Импорт внешних библиотек
Поиск…
Синтаксис
-
import {component} from 'libName'; // Will import the class "component"
-
import {component as c} from 'libName'; // Will import the class "component" into a "c" object
-
import component from 'libname'; // Will import the default export from libName
-
import * as lib from 'libName'; // Will import everything from libName into a "lib" object
-
import lib = require('libName'); // Will import everything from libName into a "lib" object
-
const lib: any = require('libName'); // Will import everything from libName into a "lib" object
-
import 'libName'; // Will import libName module for its side effects only
замечания
Может показаться, что синтаксис
import * as lib from 'libName';
а также
import lib = require('libName');
это одно и то же, но это не так!
Предположим, что мы хотим импортировать класс Person, экспортированный с помощью специфического для TypeScript синтаксиса export =
:
class Person {
...
}
export = Person;
В этом случае невозможно импортировать его с синтаксисом es6 (мы получим ошибку во время компиляции), должен использоваться синтаксис import =
специфичный для TypeScript.
import * as Person from 'Person'; //compile error
import Person = require('Person'); //OK
Обратное верно: классические модули могут быть импортированы со вторым синтаксисом, поэтому в некотором смысле последний синтаксис является более мощным, поскольку он способен импортировать весь экспорт.
Для получения дополнительной информации см. Официальную документацию .
Импорт модуля из числа npm
Если у вас есть файл определения типа (d.ts) для модуля, вы можете использовать оператор import
.
import _ = require('lodash');
Если у вас нет файла определения для модуля, TypeScript выдает ошибку при компиляции, потому что он не может найти модуль, который вы пытаетесь импортировать.
В этом случае, вы можете импортировать модуль с нормальными выполнениями require
функции. Однако он возвращает его как any
тип.
// The _ variable is of type any, so TypeScript will not perform any type checking.
const _: any = require('lodash');
Начиная с TypeScript 2.0, вы также можете использовать сокращенную декларацию окружающего модуля , чтобы сообщить TypeScript, что модуль существует, когда у вас нет файла определения типа для модуля. Однако в этом случае TypeScript не сможет предоставить какой-либо осмысленный метод проверки типов.
declare module "lodash";
// you can now import from lodash in any way you wish:
import { flatten } from "lodash";
import * as _ from "lodash";
Начиная с TypeScript 2.1, правила были еще более расслаблены. Теперь, пока модуль существует в вашем node_modules
, TypeScript позволит вам импортировать его, даже без объявления модуля нигде. (Обратите внимание, что при использовании опции --noImplicitAny
компилятора ниже будет --noImplicitAny
предупреждение.)
// Will work if `node_modules/someModule/index.js` exists, or if `node_modules/someModule/package.json` has a valid "main" entry point
import { foo } from "someModule";
Поиск файлов определений
для машинописного текста 2.x:
определения из DefinitelyTyped доступны через пакет @types npm
npm i --save lodash
npm i --save-dev @types/lodash
но в случае, если вы хотите использовать типы из других репозиториев, их можно использовать по-старому:
для машинописного текста 1.x:
Типом является пакет npm, который может автоматически устанавливать файлы определения типов в локальный проект. Я рекомендую вам прочитать быстрый старт .
npm install -global typings
Теперь у нас есть доступ к типичным кли.
Первым шагом является поиск пакета, используемого проектом.
typings search lodash NAME SOURCE HOMEPAGE DESCRIPTION VERSIONS UPDATED lodash dt http://lodash.com/ 2 2016-07-20T00:13:09.000Z lodash global 1 2016-07-01T20:51:07.000Z lodash npm https://www.npmjs.com/package/lodash 1 2016-07-01T20:51:07.000Z
Затем выберите источник, из которого вы должны установить. Я использую dt, который обозначает DefinitelyTyped репозиторий GitHub, где сообщество может редактировать типизацию, это также, как правило, последнее обновление.
Установите файлы типизации
typings install dt~lodash --global --save
Давайте разложим последнюю команду. Мы устанавливаем определенную версию lodash в качестве глобального файла типизации в нашем проекте и сохраняем его как зависимость в typings.json
. Теперь, где мы импортируем lodash, машинопись будет загружать файл типизации lodash.
Если мы хотим установить типизацию, которая будет использоваться только для среды разработки, мы можем поставить флаг
--save-dev
:typings install chai --save-dev
Использование глобальных внешних библиотек без типирования
Хотя модули идеальны, если используемая библиотека ссылается на глобальную переменную (например, $ или _), поскольку она загружается тегом script
, вы можете создать эмбиентную декларацию, чтобы ссылаться на нее:
declare const _: any;
Поиск файлов определений с помощью машинописного текста 2.x
В версиях машинописных версий 2.x теперь можно получить типизацию из репозитория npm @types . Они автоматически разрешаются компилятором typescript и гораздо проще в использовании.
Чтобы установить определение типа, вы просто устанавливаете его как зависимость от разработчиков в своих проектах package.json
например
npm i -S lodash
npm i -D @types/lodash
после установки вы просто используете модуль по-прежнему
import * as _ from 'lodash'