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.

Другие вопросы по тегам