我试图理解typescript模块编译器选项.

我浏览了typescript文档-docs

这是什么意思?

这是否意味着如果我将模块选项设为commonjs,那么编译器会将代码编译为commonjs?但我们有esnext, es16这样的 Select .在我读完Docs: Difference between esnext, es6, es2015 module targets分后,我明白了import() expressions are understood in esnext分.无论如何,编译器的目的是将代码编译成浏览器可理解的语法(commonjs).因此,将代码编译为给定的模块类型是没有意义的.

那么,这是否意味着您给出的模块类型会告诉编译器代码是用什么语法编写的呢?这意味着它必须从哪个代码编译成commonjs?但是我们有经常使用的模块类型commonjs,但我们几乎从不使用纯commonjs语法编写代码.

答案是module specifies module manager.我不明白那是什么意思.

我还考了Understanding “target” and “module” in tsconfig分和tsconfig module options - does 'System' refer to SystemJS?分.

这些似乎都不能正确回答我的问题.

tsconfig.json

{
  "compilerOptions: {
    "module": "esnext"
  }
}

推荐答案

太长,读不下go 了Tconfig中有module个.json告诉编译器要为发出的代码中的模块使用什么语法.js文件.常用值为"commonjs"(require/module.exports)或"ES2015"(import/export关键字),但也有其他模块系统.module影响发出代码的模块语法,而target影响其余代码.

  • What does 100 mean?

Tconfig中有"module"个.json告诉Typescript(TS)编译器什么是模块语法

当您在tsconfig中将"module"设置为"commonjs"时.json,这意味着编译.js文件将使用commonJS(CJS)语法,以便var x = require(...)module.exports = {...}进行导入和导出.

有几种不同的模块系统带有CJS和

ES模块现在是JS中导入/导出模块的内置标准,但在没有本机解决方案的时候,其他模块系统也被设计出来了:这就是为什么我们周围也有CJS、AMD和UMD模块.它们并不是都过时了,CJS在Node中仍然被大量使用.例如,js和AMD模块加载器允许非js导入,这在某些情况下很有用.

But then we have options like esnext

较新的JS版本有时包含更多用于模块导入/导出的功能.

Does it mean if I put module option as commonjs, then the compiler compiles the code to commonjs?

"module"设置不会影响代码的其余部分,而是使用"target",并指定输出应该与哪个JS版本兼容.

Anyway the purpose of compiler is to compile the code into browser understandable syntax(commonjs).

是的,编译器必须将TS代码转换成浏览器能够理解的JS.

So does it mean the module type you give tells the compiler in what syntax the code is written?

它告诉编译器在输出中用什么语法编写模块.js文件

Typescript相关问答推荐

使用类和子类以及迭代类属约束对类属递数据 struct 建模

如何将函数类型应用到生成器?

在Switch陈述中输入保护类

在类型内部使用泛型类型时,不能使用其他字符串索引

如何使类型只能有来自另一个类型的键,但键可以有一个新值,新键应该抛出一个错误

如果存在ts—mock—imports,我们是否需要typescpt中的IoC容器

类型脚本强制泛型类型安全

基于平台的重定向,Angular 为16

更新为Angular 17后的可选链运算符&?&问题

如何编写一个类型脚本函数,将一个对象映射(转换)为另一个对象并推断返回类型?

如何在Angular 12中创建DisplayBlock组件?

返回具有递归属性的泛型类型的泛型函数

通过字符串索引访问对象';S的值时出现文字脚本错误

类型脚本映射类型:从对象和字符串列表到键值对象

如何将v-for中的迭代器编写为v-if中的字符串?

Angular NG8001错误.组件只能在一个页面上工作,而不是在她的页面上工作

顶点堆叠的图表条形图未在正确的x轴上显示

内联类型断言的工作原理类似于TypeScrip中的断言函数?

打字:注解`是字符串`而不是`布尔`?

在Vite中将SVG导入为ReactComponent-不明确的间接导出:ReactComponent