TypeScript для EcmaScript2015, поддерживаемый Node4 с использованием gulp
Я конвертирую TypeScript в ES2015 (потому что мне нужно async,await), а затем конвертирую ES2015 в ES2015, поддерживаемый Node4 (Node4 не полностью совместим с ES2015).
Проблема в том, что определение TypeScript express
не содержит default
поле. Но это поле на самом деле существует в коде Javascript. (на самом деле express
это всего лишь пример, проблема существует во многих других библиотеках bluebird
например)
Итак, если я импортирую import {default as express} from "express";
, то у меня есть ошибка компиляции TypeScript. Если я импортирую как import * as express from "express";
, то у меня ошибка при выполнении express();
лайк express is not a function
во время выполнения.
Простой проект здесь.
Вам нужно ввести в консоли:
npm install
typings install
gulp clean,build
gulp run
чтобы понять, что я имею в виду. (npm, машинопись, gulp должны быть установлены)
Как исправить конвертацию TypeScript в ES2015, поддерживаемую Node4
1 ответ
express()
Функция концептуально является значением по умолчанию для экспресс-пакета. Вы всегда хотели бы сделать
import express from "express";
// or this, which is identical, but longer.
import {default as express} from "express";
Использование синтаксиса
import * as express from "express";
импортирует весь экспорт модуля как объект. Если вы хотите использовать это, то вам придется сделать
express.default();
Проблема с первым примером, как вы сказали, заключается в том, что он может заставить TypeScript вызвать ошибку типа. Самый простой способ исправить это - сказать, что TypeScript должен быть немного более гибким с ожиданиями относительно того, что можно считать экспортом по умолчанию при импорте модуля CommonJS. Это делается путем включения опции --allowSyntheticDefaultImports в компиляторе TypeScript.