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

Typescript import/as vs import/require?

Я использую TypeScript с Express/Node.js.

Для использования модулей в руководстве TypeScript показан следующий синтаксис:

import express = require('express');

Но также файл typescript.d.ts показывает:

import * as express from "express";

Я также искал блог MSDN, но ничего не нашел.

Какая из них правильнее на начало 2016 года? Каковы различия между ними, если они есть?

Где лучший источник для поиска информации о последнем синтаксисе для использования, поэтому я могу найти эту информацию в будущем?

4b9b3361

Ответ 1

Они в основном эквивалентны, но import * имеет некоторые ограничения, которые import ... = require не поддерживает.

import * as создает идентификатор, являющийся объектом модуля, акцент на объекте. Согласно спецификации ES6, этот объект никогда не может быть вызван или new способен - он имеет только свойства. Если вы пытаетесь импортировать функцию или класс, вы должны использовать

import express = require('express');

или (в зависимости от вашего загрузчика модуля)

import express from 'express';

Попытка использовать import * as express, а затем вызов express() всегда запрещен в соответствии с спецификацией ES6. В некоторых средах с промежуточной средой + транспиляции это может случиться так или иначе, но это может сломаться в любой момент в будущем без предупреждения, что вас огорчит.

Ответ 2

import * as express from "express";

Это предложенный способ сделать это, потому что он является стандартом для JavaScript (ES6/2015) с прошлого года.

В любом случае, в файле tsconfig.json, вы должны настроить параметр модуля на commonjs, который является форматом, поддерживаемым nodejs.