tsconfig.json的配置说明

本文详细介绍了如何配置tsconfig.json以优化TypeScript编译,并结合Babel处理兼容性问题,确保代码能在不同浏览器环境中运行。通过设置编译选项如`target`、`jsx`和`module`,以及启用`strict`模式,可以提升代码质量并确保类型安全。同时,利用Babel的`preset-env`和`useBuiltIns`策略,针对特定浏览器版本进行代码转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工程根路径下执行 npx tsc --init,生成 tsconfig.json 文件,内含有英文注释,常用的我加上了中文注释,整体保存留档。

{
  "compilerOptions": {
    /* Visit https://aka.ms/tsconfig to read more about this file */

    /* Projects */
    // "incremental": true,                              /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
    // "composite": true,                                /* Enable constraints that allow a TypeScript project to be used with project references. */
    // "tsBuildInfoFile": "./.tsbuildinfo",              /* Specify the path to .tsbuildinfo incremental compilation file. */
    // "disableSourceOfProjectReferenceRedirect": true,  /* Disable preferring source files instead of declaration files when referencing composite projects. */
    // "disableSolutionSearching": true,                 /* Opt a project out of multi-project reference checking when editing. */
    // "disableReferencedProjectLoad": true,             /* Reduce the number of projects loaded automatically by TypeScript. */

    /* Language and Environment */
    // 设置ts代码编译的目标版本
    "target": "es2016",                                  /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
    // 指定代码运行时所包含的库
    // "lib": ["ES6", "DOM"],                            /* Specify a set of bundled library declaration files that describe the target runtime environment. */
    // "jsx": "preserve",                                /* Specify what JSX code is generated. */
    // "experimentalDecorators": true,                   /* Enable experimental support for TC39 stage 2 draft decorators. */
    // "emitDecoratorMetadata": true,                    /* Emit design-type metadata for decorated declarations in source files. */
    // "jsxFactory": "",                                 /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
    // "jsxFragmentFactory": "",                         /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
    // "jsxImportSource": "",                            /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
    // "reactNamespace": "",                             /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
    // "noLib": true,                                    /* Disable including any library files, including the default lib.d.ts. */
    // "useDefineForClassFields": true,                  /* Emit ECMAScript-standard-compliant class fields. */
    // "moduleDetection": "auto",                        /* Control what method is used to detect module-format JS files. */

    /* Modules */
    // 设置编译后代码使用的模块化系统:commonjs | UMD | AMD | ES2020 | ESNext | System
    "module": "commonjs",                                /* Specify what module code is generated. */
    // 指定代码的根目录
    // "rootDir": "./",                                  /* Specify the root folder within your source files. */
    // "moduleResolution": "node",                       /* Specify how TypeScript looks up a file from a given module specifier. */
    // "baseUrl": "./",                                  /* Specify the base directory to resolve non-relative module names. */
    // "paths": {},                                      /* Specify a set of entries that re-map imports to additional lookup locations. */
    // "rootDirs": [],                                   /* Allow multiple folders to be treated as one when resolving modules. */
    // "typeRoots": [],                                  /* Specify multiple folders that act like './node_modules/@types'. */
    // "types": [],                                      /* Specify type package names to be included without being referenced in a source file. */
    // "allowUmdGlobalAccess": true,                     /* Allow accessing UMD globals from modules. */
    // "moduleSuffixes": [],                             /* List of file name suffixes to search when resolving a module. */
    // "resolveJsonModule": true,                        /* Enable importing .json files. */
    // "noResolve": true,                                /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */

    /* JavaScript Support */
    // 是否对js文件进行编译
    // "allowJs": true,                                  /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
    // 是否对js文件进行检查
    // "checkJs": true,                                  /* Enable error reporting in type-checked JavaScript files. */
    // "maxNodeModuleJsDepth": 1,                        /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */

    /* Emit */
    // "declaration": true,                              /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
    // "declarationMap": true,                           /* Create sourcemaps for d.ts files. */
    // "emitDeclarationOnly": true,                      /* Only output d.ts files and not JavaScript files. */
    // 是否生成sourceMap
    // "sourceMap": true,                                /* Create source map files for emitted JavaScript files. */
    // 将所有文件编译为一个js文件
    // "outFile": "./",                                  /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
    // 编译后文件所在目录
    // "outDir": "./",                                   /* Specify an output folder for all emitted files. */
    // 是否移除注释
    // "removeComments": true,                           /* Disable emitting comments. */
    // 不对代码进行编译
    // "noEmit": true,                                   /* Disable emitting files from a compilation. */
    // "importHelpers": true,                            /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
    // "importsNotUsedAsValues": "remove",               /* Specify emit/checking behavior for imports that are only used for types. */
    // "downlevelIteration": true,                       /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
    // "sourceRoot": "",                                 /* Specify the root path for debuggers to find the reference source code. */
    // "mapRoot": "",                                    /* Specify the location where debugger should locate map files instead of generated locations. */
    // "inlineSourceMap": true,                          /* Include sourcemap files inside the emitted JavaScript. */
    // "inlineSources": true,                            /* Include source code in the sourcemaps inside the emitted JavaScript. */
    // "emitBOM": true,                                  /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
    // "newLine": "crlf",                                /* Set the newline character for emitting files. */
    // "stripInternal": true,                            /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
    // "noEmitHelpers": true,                            /* Disable generating custom helper functions like '__extends' in compiled output. */
    // "noEmitOnError": true,                            /* Disable emitting files if any type checking errors are reported. */
    // "preserveConstEnums": true,                       /* Disable erasing 'const enum' declarations in generated code. */
    // "declarationDir": "./",                           /* Specify the output directory for generated declaration files. */
    // "preserveValueImports": true,                     /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */

    /* Interop Constraints */
    // "isolatedModules": true,                          /* Ensure that each file can be safely transpiled without relying on other imports. */
    // "allowSyntheticDefaultImports": true,             /* Allow 'import x from y' when a module doesn't have a default export. */
    "esModuleInterop": true,                             /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
    // "preserveSymlinks": true,                         /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
    "forceConsistentCasingInFileNames": true,            /* Ensure that casing is correct in imports. */

    /* Type Checking */
    // 开启所有的严格检查
    "strict": true,                                      /* Enable all strict type-checking options. */
    // 禁止隐式的any类型
    // "noImplicitAny": true,                            /* Enable error reporting for expressions and declarations with an implied 'any' type. */
    // 严格的空值检查
    // "strictNullChecks": true,                         /* When type checking, take into account 'null' and 'undefined'. */
    // 严格检查函数的类型
    // "strictFunctionTypes": true,                      /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
    // 严格检查 call apply bind的参数列表
    // "strictBindCallApply": true,                      /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
    // 严格检查属性是否初始化
    // "strictPropertyInitialization": true,             /* Check for class properties that are declared but not set in the constructor. */
    // 禁止不明确的this
    // "noImplicitThis": true,                           /* Enable error reporting when 'this' is given the type 'any'. */
    // "useUnknownInCatchVariables": true,               /* Default catch clause variables as 'unknown' instead of 'any'. */
    // 总是以严格方式对代码进行编译
    // "alwaysStrict": true,                             /* Ensure 'use strict' is always emitted. */
    // 检查未使用的局部变量
    // "noUnusedLocals": true,                           /* Enable error reporting when local variables aren't read. */
    // 检查未使用的参数
    // "noUnusedParameters": true,                       /* Raise an error when a function parameter isn't read. */
    // "exactOptionalPropertyTypes": true,               /* Interpret optional property types as written, rather than adding 'undefined'. */
    // 检查函数没有隐式的返回值
    // "noImplicitReturns": true,                        /* Enable error reporting for codepaths that do not explicitly return in a function. */
    // 检查switch中是否包含正确的break
    // "noFallthroughCasesInSwitch": true,               /* Enable error reporting for fallthrough cases in switch statements. */
    // "noUncheckedIndexedAccess": true,                 /* Add 'undefined' to a type when accessed using an index. */
    // "noImplicitOverride": true,                       /* Ensure overriding members in derived classes are marked with an override modifier. */
    // "noPropertyAccessFromIndexSignature": true,       /* Enforces using indexed accessors for keys declared using an indexed type. */
    // "allowUnusedLabels": true,                        /* Disable error reporting for unused labels. */
    // 检查不可达代码 true: 忽略; false: 不可达代码将会引起错误
    // "allowUnreachableCode": true,                     /* Disable error reporting for unreachable code. */
    // 有错误时不进行编译
    // "noEmitOnError": false

    /* Completeness */
    // "skipDefaultLibCheck": true,                      /* Skip type checking .d.ts files that are included with TypeScript. */
    "skipLibCheck": true                                 /* Skip type checking all .d.ts files. */
  }
}

开发中经常还需要结合babel来实现对代码的转义,来兼容更多的浏览器。具体配置:

...略...
module: {
    rules: [
        {
            test: /\.ts$/,
            use: [
                {
                    loader: "babel-loader",
                    options:{
                        presets: [
                            [
                                "@babel/preset-env",
                                {
                                    "targets":{
                                        "chrome": "58",
                                        "ie": "11"
                                    },
                                    "corejs":"3",
                                    "useBuiltIns": "usage"
                                }
                            ]
                        ]
                    }
                },
                {
                    loader: "ts-loader",

                }
            ],
            exclude: /node_modules/
        }
    ]
}
...略...

这样,ts编译后的文件将会被babel再次处理,可以在targets中指定要兼容的浏览器版本。

这里有更详细的解释说明 tsconfig.json配置说明_X01动力装甲的博客-优快云博客

<think>好的,我现在需要帮助用户了解如何正确配置tsconfig.json文件,包括方法和常用选项说明。根据用户提供的引用内容,我需要结合这些信息来构建回答,同时还要遵循系统级指令中的格式要求。 首先,我得回顾一下tsconfig.json的基本作用。它是TypeScript项目的配置文件,用于指定编译选项和文件包含等设置。用户可能想知道从哪里开始配置,有哪些关键选项需要注意,以及如何根据项目类型进行调整。 接下来,我需要整理引用中的信息。引用1提到tsconfig.json覆盖了多种项目类型的需求,包括前端和后端应用,这说明配置需要灵活适应不同环境。引用2强调理解配置项的重要性,可以避免问题并提高效率,所以解释每个配置项的作用是必要的。 用户的问题分为两部分:配置方法和常用选项说明。我应该先介绍创建配置文件的方法,比如使用tsc --init命令生成默认文件,然后逐步调整选项。然后,分模块讲解常用选项,比如编译选项、模块解析、类型检查等,每个部分都要给出示例和说明。 同时,要注意系统级指令中的格式要求。行内数学表达式要用$...$,但在这个问题中可能用不到数学公式,更多是代码块和配置项。独立公式需要单独成段,但同样可能不适用。需要确保LaTeX语法正确,不过这里的回答可能较少涉及数学表达式,更多是代码和配置示例。使用中文回答,生成相关问题,并在引用处添加标识。 另外,用户提供的示例是关于快速排序的,其中包含代码块和相关问题。我需要模仿这个结构,先给出配置方法,再分点详细说明常用选项,每个部分可能包含代码示例或配置片段,最后生成相关问题。 需要检查是否存在遗漏的常用选项,比如target、module、outDir、strict等,这些都是用户配置时经常需要调整的。同时,针对不同项目类型(如前端框架、Node.js后端)给出具体配置示例,帮助用户理解如何应用这些选项。 可能还需要注意路径配置,比如baseUrl和paths,这对模块别名设置很重要,尤其在大型项目中。类型检查相关的选项如strictNullChecks、noImplicitAny等,对于代码质量很关键,需要详细说明。 最后,生成的相关问题应该围绕tsconfig.json的扩展,比如优化配置、特定框架的配置、常见错误处理等,这样用户可以有进一步学习的路径。 总结步骤: 1. 介绍tsconfig.json的作用和创建方法。 2. 分模块讲解常用配置选项,每个选项给出示例和说明。 3. 提供针对不同项目类型的配置示例。 4. 添加相关问题,引导用户深入学习。 5. 确保引用标记正确,格式符合要求。</think>### tsconfig.json 配置方法与常用选项说明 tsconfig.json 是 TypeScript 项目的核心配置文件,用于控制编译选项、文件包含规则和模块解析策略。以下为详细配置方法和常用选项说明: --- #### **1. 基础配置方法** 1. **生成初始文件** 在项目根目录执行命令: ```bash tsc --init ``` 生成默认配置文件,包含所有可配置项及其注释。 2. **手动调整配置** 根据项目需求修改 `compilerOptions` 和 `include/exclude` 等字段。例如: ```json { "compilerOptions": { "target": "ES6", "module": "CommonJS" }, "include": ["src/**/*"], "exclude": ["node_modules"] } ``` --- #### **2. 常用选项详解** ##### **编译目标与模块系统** - **`target`** 指定编译后的 JavaScript 版本,如 `ES5`、`ES6`。 ```json "target": "ES2020" ``` - **`module`** 定义模块系统类型,如 `CommonJS`(Node.js)、`ESNext`(现代浏览器)。 ```json "module": "CommonJS" ``` ##### **输出与路径控制** - **`outDir`** 指定编译输出目录: ```json "outDir": "./dist" ``` - **`baseUrl` 与 `paths`** 配置模块别名解析,简化导入路径[^1]: ```json "baseUrl": "./src", "paths": { "@utils/*": ["utils/*"] } ``` ##### **类型检查与严格模式** - **`strict`** 启用所有严格类型检查(推荐开启): ```json "strict": true ``` - **`noImplicitAny`** 禁止隐式 `any` 类型: ```json "noImplicitAny": true ``` ##### **其他关键选项** - **`esModuleInterop`** 允许 CommonJS 与 ES 模块兼容导入: ```json "esModuleInterop": true ``` - **`skipLibCheck`** 跳过第三方库类型检查以提升编译速度: ```json "skipLibCheck": true ``` --- #### **3. 按项目类型配置示例** ##### **前端框架(React/Vue)** ```json { "compilerOptions": { "target": "ES6", "module": "ESNext", "jsx": "react-jsx", // Vue 使用 "preserve" "moduleResolution": "Node", "strict": true, "esModuleInterop": true } } ``` ##### **Node.js 后端** ```json { "compilerOptions": { "target": "ES2020", "module": "CommonJS", "outDir": "./dist", "rootDir": "./src", "strictNullChecks": true } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值