用Node.js带来了对ES2020的更新支持,并增加了对ES模块的支持,如何配置TypeScript以输出利用所有这些新功能的JavaScript代码?

推荐答案

从Node开始.js 14.0.014.0.0%支持ES2020,对ES模块的支持已经登陆!如果您知道您的目标是该版本或更新版本,那么最佳配置如下所示:

  • "module": "ES2020"&;"moduleResolution": "node"

    node .js 14支持加载模块,而不是旧的CommonJS格式,我们必须告诉TypeScript我们正在使用Node.js解析模块的规则.

  • "allowSyntheticDefaultImports": true

    要提供向后兼容性,请 Select Node.js允许您使用默认导入导入CommonJS包.这个标志告诉TypeScript,可以在CommonJS模块上使用import.

  • "target": "ES2020"

    这告诉TypeScript,可以输出带有ES2020特性的JavaScript syntax.在实践中,这意味着它将输出可选的链接操作符&;异步/等待语法,而不是嵌入polyfill.

  • "lib": ["ES2020"]

    这告诉TypeScript可以使用ES2020或更早版本中引入的functions and properties.实际上,这意味着您可以使用例如Promise.allSettledBigInt.

因此,完整配置将是:

{
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "lib": ["ES2020"],
    "module": "ES2020",
    "moduleResolution": "node",
    "target": "ES2020"
  }
}

除此之外,我们还需要告诉Node.js将此项目中的.js个文件视为ES模块.原因是这个 node .js必须与为旧 node 编写的代码保持向后兼容性.js版本.这可以通过在package.json中添加"type": "module"来实现:

{
  "type": "module"
}

如果您是从早期版本的Node提交,则另一个更改.那是the file extension when importing files are now mandatory.这意味着您必须在本地进口的末尾填写.js.请注意,这是.js,即使您正在导入一个实际具有文件扩展名.ts的TypeScript文件.这似乎有点让人信服,但this comment from one of the TS contributors explains why that is.

下面是一些如何写import条陈述的例子:

// Built-in Node.js modules
import { readFileSync } from 'fs'

// CommonJS packages from Npm
import md5File from 'md5-file'

// The local file "a.ts"
import { a } from './a.js'

如果您现在想继续使用CommonJS,为了避免上述警告,可以使用以下配置:

{
  "compilerOptions": {
    "lib": ["ES2020"],
    "module": "CommonJS",
    "target": "ES2020"
  }
}

如果您正在运行Node.js 16你可以看到我的similar answer for Node.js 16 here

如果您正在运行Node.js 12你可以看到我的similar answer for Node.js 12 here

如果您正在运行Node.js 10你可以看到我的similar answer for Node.js 10 here

如果您正在运行Node.js 8你可以看到我的similar answer for Node.js 8 here

Node.js相关问答推荐

即使DDB键不存在, node Lambda也不会失败,并返回NULL作为结果

在Node JS中获取控制台选项卡标题

如何在MongoDB中更新嵌套数组

如何在Reaction应用程序中查看存储的斑点图像?

创建查询以展开数组并筛选出具有特定值的元素之后的元素

Promise 和 Azure 语音转文本

使用NodeJS通过服务账号列出Google Workspace用户

如何使用Stripe测试失败的收费?

如何在mongoose 聚合中执行全文搜索

Nodejs 从链接数组中获取数据并保存到 mongodb

将代码转换为 ES6 Discord.js 的问题

图像存储在后端文件夹中,但使用 multer 和 react.js 在前端找不到

如何使动态私有IP地址静态?

Node.js mongodb 驱动程序异步/等待查询

如何可靠地散列 JavaScript 对象?

如何为 node.js 服务器分配域名?

Node.JS 中的基本 HTTP 身份验证?

如何在 node 中转义 shell 命令的字符串?

使用 Node.js 和 Express 进行简单的 API 调用

如何断言不为空?