Подтвердить что ты не робот

Разница между `import from` и` import require` в TypeScript

Я использую node.js, и я недавно решил дать TypeScript снимок, но я немного смущен тем, как модули импортируются. Я вижу два разных синтаксиса: я не мог точно узнать, в чем их отличие:

import * as a from 'a'; // ES6 standard to import stuff
// OR ...
import a = require('a');

Это то же самое? и если это не так, где я должен использовать каждый из них?

4b9b3361

Ответ 1

import * as a from 'a'; - новый синтаксис импорта "ES6 style" (доступный с Typescript 1.5).

По возможности этот синтаксис теперь должен использоваться.

Однако есть одно предостережение. Синтаксис импорта ES6 может импортировать только модули (как определено ES6) или объекты (классы, интерфейсы, vars,...), экспортированные как часть модуля.

Некоторые Javascript librairies будут напрямую экспортировать функцию или класс, и соответствующий файл определения будет выглядеть следующим образом:

declare module "my-class" {

    class MyClass { ... }

    export = MyClass
} 

В этом случае синтаксис "старого" импорта является единственным, который можно использовать

import MyClass = require("my-class");

Несоблюдение этого синтаксиса приведет к ошибке TS2497

Отметьте эту проблему для получения подробной информации и возможного обходного пути, который в предыдущем случае должен был бы добавить в файл определения объявление пустого модуля

declare module "my-class" {

    class MyClass { ... }

    module MyClass {} // <=

    export = MyClass
}