Node.js Typescript添加普通导出语句

Node.js Typescript添加普通导出语句,node.js,typescript,Node.js,Typescript,我正在为Node.js构建一些typescript/react控制台应用程序 如果源代码中有任何导入模块,它会添加export{}编码到输出中 请问我怎样才能处理掉这些东西? 我用 打字稿4.1.2 ts节点 tsconfig: 源代码: import { useState, useEffect } from "react"; console.log("aaa"); 输出: console.log("aaa"); export {

我正在为Node.js构建一些typescript/react控制台应用程序

如果源代码中有任何导入模块,它会添加
export{}编码到输出中

请问我怎样才能处理掉这些东西?

我用

  • 打字稿4.1.2
  • ts节点
  • tsconfig:
源代码:

import { useState, useEffect } from "react";
console.log("aaa");
输出:

console.log("aaa");
export {}; // <------ the problem
console.log(“aaa”);

导出{};// 随着ECMAScript 2015中模块的引入,ECMAScript被分为两种稍微不兼容的语言:脚本和模块。但是,无法显式地将资源标记为带内的脚本或模块。唯一的方法是带外,例如通过HTTP内容类型或命令行标志,明确告知ECMAScript引擎将文件解释为模块

因此,为了让ECMAScript执行引擎明白,这实际上是一个模块而不是脚本,唯一的方法是确保资源只能合法地解释为模块而不是脚本

空的
export
语句就是为了达到这个目的,因为它在脚本中是非法的,但没有副作用

长话短说:您不能删除
export
语句,因为这会使文件变得模棱两可:仅从源代码无法判断文件是脚本还是模块。出于向后兼容性的原因,大多数ECMAScript引擎将不明确的资源解释为脚本。(更严格的引擎可能会完全拒绝该文件,这也不是您想要的。)


因此,如果删除
export
语句,文件将不再被解释为模块。但是,TypeScript源文件是一个模块(因为它包含一个
导入
语句),因此编译器必须发出
导出
语句,以确保编译后的文件也是一个模块。

随着ECMAScript 2015中模块的引入,ECMAScript被分为两种稍微不兼容的语言:脚本和模块。但是,无法显式地将资源标记为带内的脚本或模块。唯一的方法是带外,例如通过HTTP内容类型或命令行标志,明确告知ECMAScript引擎将文件解释为模块

因此,为了让ECMAScript执行引擎明白,这实际上是一个模块而不是脚本,唯一的方法是确保资源只能合法地解释为模块而不是脚本

空的
export
语句就是为了达到这个目的,因为它在脚本中是非法的,但没有副作用

长话短说:您不能删除
export
语句,因为这会使文件变得模棱两可:仅从源代码无法判断文件是脚本还是模块。出于向后兼容性的原因,大多数ECMAScript引擎将不明确的资源解释为脚本。(更严格的引擎可能会完全拒绝该文件,这也不是您想要的。)


因此,如果删除
export
语句,文件将不再被解释为模块。但是,TypeScript源文件是一个模块(因为它包含一个
import
语句),因此编译器必须发出
export
语句,以确保编译后的文件也是一个模块。

我相信这是因为任何包含导入或导出的文件都被视为一个模块,而不仅仅是一个脚本(在ES2015+和TS中)。一旦传输,它仍然是一个模块,因此添加了
export{};
,以确保在JavaScript眼中它仍然是一个模块,而不是脚本。但在后一部分我可能错了。我相信这是因为任何包含导入或导出的文件都被视为一个模块,而不仅仅是一个脚本(在ES2015+和TS中)。一旦传输,它将保持为一个模块,因此添加了
导出{};
,以确保在JavaScript眼中它仍然是一个模块,而不是脚本。不过,我可能在后一部分错了。
console.log("aaa");
export {}; // <------ the problem