本文详细讲解了VUE源码中tsconfig.json文件中的各个属性,让读者进一步了解常用的配置信息,希望对看到这篇文章的读者有所帮助。{"compilerOptions":{/**用于在导入非相关模块时加宽搜索路径。它的默认值是“./”*目的是为了解决项目代码层级比较深,各种.../,.../.../,.../...时相互引用麻烦的问题/…/etc.*"paths":{*"@vue":["packages/vue/src"]*}*/"baseUrl":".",/*指定输出目录*/"outDir":"dist",/**是否生成目标文件的sourceMap文件*该文件允许调试器和其他工具在实际使用发出的JavaScript文件时显示原始的TypeScript源代码。*此文件为.js.map(或.jsx.map)格式,与相应的.js输出文件位于同一目录*/"sourceMap":false,/**定义编译后的目标javascript版本,可选择包含es6,es5,esnext*如果需要考虑兼容性问题,可以设置为es5或更低版本。一般来说,我们需要把它编译成es5,这样才能被主流浏览器解释。*当然,你说我的react代码不是给浏览器看的。比如你用react-native做手机app,那么这里的选项可以是es6。*如果代码在更高版本的现代浏览器或更高版本的node中,可以设置为esnext*/"target":"esnext",/**告诉编译器对其中的模块使用什么发出的.js文件语法。可选none,commonjs,amd,system,umd,es2015或esnext*告诉编译器代码是用哪种语法编写的,这意味着它必须从哪个代码编译到commonjs。*如果用于服务器端项目Node.js如果使用Angular前端应用程序,那么CJS可能不是ESM*较新的JS版本有时包含更多用于模块导入/导出的功能。将导出设置为“模块”可以支持这些功能,这些功能通常还没有添加到官方规范中。例如动态导入的“ESNext”表达式。*无论如何,编译器的目的是将代码编译成浏览器可以理解的语法(commonjs)*module影响发出代码的模块的语法,target影响其余代码*/"module":"esnext",/**module解析策略,ts默认使用node的解析策略,即相对方式导入,可选值:node,classic*如果不指定,--modulecommonjs默认为node,否则默认到经典(包括--module设置为amd、system、umd、es2015、esnext等)*Node模块解析是TypeScript社区中最常用的,并且推荐用于大多数项目。*如果您在TypeScript中遇到导入和导出解析问题,请尝试设置moduleResolution:“node”以查看是否可以解决问题。*/"moduleResolution":"node",/**允许在TS项目中导入JavaScript文件,而不仅仅是.ts和.tsx文件。即允许ts和tsx文件与已有的JavaScript文件共存*例如js文件@filename:card.js:exportconstdefaultCardDeck="Heart";*在ts文件@filename中引入上面的js变量:index.ts:import{defaultCardDeck}from"./card";*如果allowJs设置为false,将抛出错误。*/"allowJs":false,/**启用所有严格类型检查*true=>同时启用alwaysStrict,noImplicitAny,noImplicitThis和strictNullChecks*alwaysStrict:严格模式,对每个文件添加"usestrict"*noImplicitAny:notallowedImplicitany,如果为true,则函数的形参必须有类型,如果不能调用带有类名的js对象,则any。例如(d:any)=>{};iffalse,允许隐式any,函数看起来更像js(d)=>{}*noImplicitThis:this不允许隐式any*strictNullChecks:bothundefinedandnull空类型的设计使用起来不方便,所以通过strictNullChecks严格检查类型,让代码更安全*/"strict":true,/*只检查声明的、未使用的局部变量(只提示,不报错)*/"noUnusedLocals":true,/***是否启用实验装饰器功能。装饰器的语法是ES7的实验语法。如果未启用,可能会出现以下错误:*对装饰器的实验性支持是一项功能,在未来的版本中可能会发生变化。设置'experimentalDecorators'选项以删除此警告。*/"experimentalDecorators":true,/***防止将json文件引入ts文件,会报如下红色波浪线。*TypeScript2.9的resolveJsonModule函数,只要我用ts-node执行应用,这个函数就可以正常工作*/"resolveJsonModule":true,/*该函数是支持通过importdfrom导入commonjs包'cjs'*/"esModuleInterop":true,/*用于指定是否删除编译后的文件注释,如果设置为true,则删除注释,默认为false*/"removeComments":false,/***指定用于开发环境的jsx代码:'preserve'、'react-native'或'react'*preserve:JSX将保留在生成的代码中,用于后续转换操作(例如:Babel)。此外,输出文件的扩展名为.jsx。*react:会生成React.createElement,使用前无需转换操作,输出文件后缀为.js。*react-native:相当于preserve,同样保留了所有的JSX,只是输出文件的扩展名是.js*/"jsx":"preserve",/**编译时需要导入的库文件列表,告诉打字稿编译器哪些功能可用。*比如我们这里有一个dom库文件,它会告诉编译器dom的api接口,所以当我们在ts代码中使用dom时,比如执行“document.getElementById("root")”这句,编译器会知道如何检查。*如果我们不设置这个选项,那么编译器也有自己默认的库文件列表,一般是["dom","es6","DOM.Iterable"]等等*/"lib":["esnext","dom"],/*用于指定需要包含的模块,只会加载这里列出的模块的声明文件*/"types":["jest","puppeteer","node"],/***用于指定编译文件的根目录。编译器会在根目录下查找入口文件。*如果编译器发现rootDir的值作为根目录搜索入口文件,没有加载所有文件就会报错。,但不会停止编译*/"rootDir":".",/*用于设置模块名到基于baseUrl的路径映射*/"paths":{"@vue/*":["packages/*/src"],"vue":["packages/vue/src"]}},/***include用于指定要编译的路径列表,但与files不同的是这里的路径可以是文件夹,*也可以是文件,可以使用相对路径和绝对路径,也可以使用通配符,*比如"./src"表示编译src文件夹下的所有文件和子文件夹下的文件*/"include":["packages/global.d.ts","packages/*/src","packages/runtime-dom/types/jsx.d.ts","packages/*/__tests__","test-dts"]}
