【问题标题】:TypeScript to EcmaScript2015 supported by Node4 using gulpNode4 使用 gulp 支持 TypeScript 到 EcmaScript2015
【发布时间】:2016-07-22 11:38:25
【问题描述】:

我将 TypeScript 转换为 ES2015(因为我需要 async,await),然后将 ES2015 转换为 Node4 支持的 ES2015(Node4 与 ES2015 不完全兼容)。

问题是 express 的 TypeScript 定义不包含 default 字段。但是这个字段实际上存在于 Javascript 代码中。 (实际上express 只是示例,许多其他库中存在问题bluebird 例如)

所以,如果我导入 import {default as express} from "express";,那么我有编译 TypeScript 错误。如果我导入为import * as express from "express";,则在运行时执行express(); 时会出现错误,如express is not a functionin runtime。

简单项目是here

你需要在控制台输入:

npm install
typings install
gulp clean,build
gulp run

看看我的意思。 (应安装 npm、typescript、gulp)

如何正确将 TypeScript 转换为 Node4 支持的 ES2015

【问题讨论】:

  • @estus 但是在打字稿中使用require 时会丢失打字稿编译类型检查吗?
  • @estus 我认为require 用于导入没有类型定义的 JavaScript,然后在 typescript 中没有类型检查。
  • 但是您在 Node 模块中没有任何类型定义,是吗?
  • 我想你可能想要--allowSyntheticDefaultImports
  • import express from "express"; 是导入这个的正确方法,你说那给你一个打字稿错误。

标签: javascript node.js typescript ecmascript-6


【解决方案1】:

express() 函数在概念上是 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 模块时更加灵活,它对什么是“默认”导出的期望。这是通过在 TypeScript 编译器上启用 --allowSyntheticDefaultImports 选项来完成的。

【讨论】:

  • 你知道如何在 Intellij Idea 的“错误和语法高亮”中开启这个选项吗?它认为import express from "express"; 现在是错误的,不要给我正确的“代码完成”。
  • 嗯,我不知道。也许值得一个单独的问题?
猜你喜欢
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 2016-12-17
  • 2019-08-30
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多