Поиск…


Синтаксис

  • 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

Теперь у нас есть доступ к типичным кли.

  1. Первым шагом является поиск пакета, используемого проектом.

    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
    
  2. Затем выберите источник, из которого вы должны установить. Я использую dt, который обозначает DefinitelyTyped репозиторий GitHub, где сообщество может редактировать типизацию, это также, как правило, последнее обновление.

  3. Установите файлы типизации

     typings install dt~lodash --global --save
    

Давайте разложим последнюю команду. Мы устанавливаем определенную версию lodash в качестве глобального файла типизации в нашем проекте и сохраняем его как зависимость в typings.json . Теперь, где мы импортируем lodash, машинопись будет загружать файл типизации lodash.

  1. Если мы хотим установить типизацию, которая будет использоваться только для среды разработки, мы можем поставить флаг --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'


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow