TypeScript解读TSConfig

news2024/11/27 9:45:27

 🎬 岸边的风:个人主页

 🔥 个人专栏 :《 VUE 》 《 javaScript 》

⛺️ 生活的理想,就是为了理想的生活 !

在这里插入图片描述

目录

创建和基本配置

compilerOptions

target

module

outDir

strict

lib

sourceMap

paths

allowJs

esModuleInterop 和 allowSyntheticDefaultImports

include 和 exclude

文件引用和 composite

declaration

tsconfig.json 继承

定制化tsconfig.base

2. 创建 tsconfig.json 文件

3. 创建包入口文件

4. 构建和发布

5. 发布到 NPM

6. 在其他项目中使用

总结

TypeScript 配置文件(tsconfig.json)是用于配置 TypeScript 项目的重要文件。它允许开发者自定义 TypeScript 编译器的行为,指定编译选项、文件包含与排除规则、输出目录等。通过合理配置 tsconfig.json,我们可以根据项目需求进行灵活的 TypeScript 编译设置。

本文将全面解读 tsconfig.json 的各个配置选项,并提供一些常见的使用场景和示例代码,以及封装定制化自己tsconfig.base配置

创建和基本配置

要使用 TypeScript 配置文件,我们首先需要创建一个名为 tsconfig.json 的文件,并将其放置在项目的根目录下。

下面是一个基本的 tsconfig.json 配置示例:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "outDir": "dist"
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules",
    "dist"
  ]
}

在上述示例中,我们使用 compilerOptions 配置选项指定了 TypeScript 编译器的选项。其中:

  • "target": "es6" 指定编译的目标 JavaScript 版本为 ES6。
  • "module": "commonjs" 指定模块的生成方式为 CommonJS。
  • "outDir": "dist" 指定输出目录为 "dist"。

同时,我们使用 include 和 exclude 配置选项分别指定了需要编译的源文件的包含规则和排除规则。

compilerOptions

compilerOptions 是 tsconfig.json 中最重要的配置选项之一,它允许我们指定 TypeScript 编译器的各种行为和设置。

target

target 选项指定了编译后的 JavaScript 代码所要遵循的 ECMAScript 标准。常见的选项包括 "es5""es6""es2015""es2016" 等。

"compilerOptions": {
  "target": "es6"
}

module

module 选项用于指定生成的模块化代码的模块系统。常见的选项包括 "commonjs""amd""es2015""system" 等。

"compilerOptions": {
  "module": "commonjs"
}

outDir

outDir 选项指定了编译输出的目录路径。

"compilerOptions": {
  "outDir": "dist"
}

strict

strict 选项用于启用严格的类型检查和更严格的编码规范。

"compilerOptions": {
  "strict": true
}

lib

lib 选项用于指定 TypeScript 编译器可以使用的 JavaScript 标准库的列表。默认情况下,

TypeScript 编译器会根据目标版本自动选择合适的库。

"compilerOptions": {
  "lib": ["es6", "dom"]
}

sourceMap

sourceMap 选项用于生成与源代码对应的源映射文件(.map 文件),以便在调试过程中可以将编译后的 JavaScript 代码映射回原始 TypeScript 代码。

"compilerOptions": {
  "sourceMap": true
}

paths

paths 选项用于配置模块解析时的路径映射,可以帮助我们简化模块导入的路径。

"compilerOptions": {
  "paths": {
    "@/*": ["src/*"]
  }
}

allowJs

allowJs 选项允许在 TypeScript 项目中引入 JavaScript 文件,使得我们可以混合使用 TypeScript 和 JavaScript。

"compilerOptions": {
  "allowJs": true
}

esModuleInterop 和 allowSyntheticDefaultImports

esModuleInterop 属性用于提供对 ES 模块的兼容性支持。当我们在 TypeScript 项目中引入 CommonJS 模块时,可以通过设置 esModuleInterop 为 true 来避免引入时的错误。

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "lib": ["es6", "dom"],
    "outDir": "dist",
    "rootDir": "src",
    "strict": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true
  }
}

在上面的示例中,我们设置了 esModuleInterop 和 allowSyntheticDefaultImports 属性为 true,以支持对 ES 模块的兼容性导入。

更多的 compilerOptions 配置选项可以参考 TypeScript 官方文档:Compiler Optionsopen in new window.

include 和 exclude

include 和 exclude 配置选项用于指定哪些文件应该包含在编译过程中,以及哪些文件应该排除在编译过程之外。

include 是一个文件或者文件夹的数组,用于指定需要编译的文件或文件夹的路径模式。

"include": [
  "src/**/*.ts",
  "test/**/*.ts"
]

exclude 是一个文件或者文件夹的数组,用于指定需要排除的文件或文件夹的路径模式。

"exclude": [
  "node_modules",
  "dist"
]

在上述示例中,我们将 src 文件夹和 test 文件夹下的所有 TypeScript 文件包含在编译过程中,并排除了 node_modules 文件夹和 dist 文件夹。

文件引用和 composite

files 配置选项允许我们显式列出需要编译的文件路径。

"files": [
  "src/main.ts",
  "src/utils.ts"
]

composite 配置选项用于启用 TypeScript 的项目引用功能,允许我们将一个 TypeScript 项目作为另一个项目的依赖。

"composite": true

declaration

declaration 配置选项用于生成声明文件(.d.ts 文件),它们包含了编译后 JavaScript 代码的类型信息。

"declaration": true

tsconfig.json 继承

TypeScript 支持通过 extends 配置选项从其他的 tsconfig.json 文件中继承配置。

{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "outDir": "dist"
  },
  "include": [
    "src/**/*.ts"
  ]
}

在上述示例中,我们通过 extends 指定了一个基础配置文件 tsconfig.base.json,然后在当前的 tsconfig.json 中添加了额外的编译选项和文件包含规则。

定制化tsconfig.base

制化tsconfig.base可以让我们在多个项目中共享和复用配置,提高开发效率。下面是一些步骤来封装自己的 TSConfig 为一个库:

首先,我们需要创建一个新的 TypeScript 项目作为我们的库项目。可以使用以下命令初始化一个新的项目:

$ mkdir my-tsconfig-lib
$ cd my-tsconfig-lib
$ npm init -y

2. 创建 tsconfig.json 文件

在项目根目录下创建一个名为 tsconfig.json 的文件,并将 TSConfig 的配置内容添加到其中。

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "outDir": "dist"
  },
  "include": ["src/**/*.ts"],
  "exclude": ["node_modules", "dist"]
}

这是一个示例的 TSConfig 配置,你可以根据自己的需求进行相应的修改。

3. 创建包入口文件

为了能够在其他项目中使用我们的库,我们需要创建一个入口文件来导出我们的 TSConfig。

在项目根目录下创建一个名为 index.ts 的文件,并添加以下代码:

import * as tsconfig from './tsconfig.json';

export default tsconfig;

在上述代码中,我们将 tsconfig.json 导入为一个模块,并使用 export default 将其导出。

4. 构建和发布

现在我们可以使用 TypeScript 编译器将我们的代码构建为 JavaScript,以便在其他项目中使用。

首先,确保你已经在项目中安装了 TypeScript:

$ npm install typescript --save-dev

然后,在 package.json 中添加构建脚本:

{
  "scripts": {
    "build": "tsc"
  }
}

最后,运行构建命令进行构建:

$ npm run build

构建完成后,我们的库文件

将位于 dist 目录下。

5. 发布到 NPM

要将我们的 TSConfig 封装为一个库,并使其可供其他项目使用,我们可以将其发布到 NPM。

首先,创建一个 NPM 账号,并登录到 NPM:

$ npm login

然后,在项目根目录下运行以下命令发布库:

$ npm publish

发布成功后,我们的 TSConfig 库就可以在其他项目中使用了。

6. 在其他项目中使用

在其他项目中使用我们的 TSConfig 库非常简单。首先,在目标项目中安装我们的库:

$ npm install my-tsconfig-lib --save-dev

然后,在目标项目的 tsconfig.json 文件中使用我们的 TSConfig:

{
  "extends": "my-tsconfig-lib"
}

通过 extends 配置选项,我们可以继承和使用我们的 TSConfig。

总结

通过 tsconfig.json 文件,我们可以配置 TypeScript 编译器的行为,包括编译选项、文件包含与排除规则、输出目录等。合理配置 tsconfig.json 可以帮助我们根据项目需求进行灵活的 TypeScript 编译设置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1008822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10_光速学会docker用法:80分钟一口气学完docker+k8s!带你掌握docker+k8s所有核心知识点,全程干货,无废话!

启动第一个docker容器 #1、获取镜像 #2、运行镜像,生成容器,应用就跑在了容器中。 Nginx web服务器,运行处一个80端口的网站 #在宿主机上,运行Nginx 1、开启服务器 2、在服务器上安装好运行Nginx所需的依赖关系 3、安装nginx …

Allegro如何导出带有钻孔数据的dxf文件?

在Allegro软件中,导出带有钻孔数据的DXF文件是一个常见的任务,特别是需要将涉及文件与其他CAD工具或PCB制造商共享时,所以下面将谈谈,如何在Allegro软件中导出带有钻孔数据的dxf文件。 1、打开设计文件 首先,打开Alle…

RISC Zero zkVM 白皮书

1. 引言 RISC Zero提供了开源的虚拟机零知识证明系统,即zero-knowledge virtual machine(简称zkVM)。当在zkVM中执行某RISC-V二进制文件时,其输出为: 二进制文件执行结果+ 一个computational receipt&…

Unity中程序集dll

一:前言 一个程序集由一个或多个文件组成,通常为扩展名.exe和.dll的文件称为程序集,.exe是静态的程序集,可以在.net下直接运行加载,因为exe中有一个main函数(入口函数),.dll是动态链接库&#…

安装配置 zookeeper(单机版)

目录 一 准备并解压安装包 二 修改zoo.cfg文件 三 创建相应两个目录 四 创建文件myid 五 修改环境变量 六 启动 zookeeper 一 准备并解压安装包 这里提供了网盘资源 http://链接: https://pan.baidu.com/s/1BybwSQ_tQUL23OI6AWxwFw?pwdd4cf 提取码: d4cf 这里的安装包是…

市面上的ipad国产触控笔怎么样?开学性价比高的电容笔测评

由于Apple Pencil的问世,成为了iPad的一款便携式的生产力配件,它的优点是,与iPad相结合的电容笔,可以让专业的画师在iPad上画画,并且可以画出不同粗细的线条,这对需要书写的学生来说,是非常有用…

解决 SQLyog 连接 MySQL8.0+ 报错:错误号码2058

文章目录 一、问题现象二、原因分析三、解决方案1. 方案1:更新SQLyog版本2. 方案2:修改用户的授权插件3. 方案3:修复my.cnf 或 my.ini配置文件 四、最后总结 本文将总结如何解决 SQLyog 连接 MySQL8.0 时报错:错误号码2058 一、问…

数据可视化大屏模板 | 保姆级使用教程

近来很多朋友私信咨询怎么下载使用数据可视化大屏模板,在这里就给大家做一个相对简单的教程总结。有需要的朋友记得先收藏保存,以便不时之需。 数据可视化大屏制作软件:奥威BI系统 数据可视化报表模板板块:模板秀 主要操作&…

uni-app:实现条件判断展示图片(函数判定+三目运算)

一、多条件判断&#xff08;通过函数进行图片展示&#xff09; 效果 代码 在data中定义图片信息和要传递的数据信息&#xff0c;在src中写入函数并携带要传递的数据&#xff0c;通过传递的数据在函数中进行判断&#xff0c;并返回对应的图片信息 <template><view&…

vue中转换base64文件数据后通过blob下载

可以看到这里我要转换的数据是content字段&#xff0c;即将base64文件数据转换后下载下来&#xff1a; downloadAttachment({ attachmentId: id }).then(({ data }) > {proxy.$modal.closeLoading();// atob先解码base64数据const raw window.atob(data.content);// 获取解…

亚马逊小类目排名怎么看?亚马逊小类目是什么意思?——站斧浏览器

亚马逊的产品分类结构被分为多个级别&#xff0c;包括大类目、小类目和子类目。本文介绍了亚马逊小类目排名查看方式。 亚马逊小类目排名怎么看&#xff1f; 小类目排名是亚马逊为每个小类目中的商品分配的销售排名。它反映了在该小类目中的销售表现&#xff0c;通常以数字形…

Python编程指南:利用HTTP和HTTPS适配器实现智能路由

嗨&#xff0c;爬虫大佬们&#xff01;今天我要为大家分享一篇关于如何利用HTTP和HTTPS适配器来实现智能路由的Python编程指南。在现代互联网应用中&#xff0c;路由功能起着至关重要的作用&#xff0c;而利用Python编程语言实现智能路由则可以为我们的应用带来更高的灵活性和性…

LeetCode-热题100-笔记-day28

98. 验证二叉搜索树https://leetcode.cn/problems/validate-binary-search-tree/ 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点…

AI绘画:StableDiffusion实操教程-斗罗大陆-朱竹清(附高清图下载)

大家好&#xff0c;我是小梦&#xff0c;最近一直研究AI绘画。 不久前&#xff0c;我与大家分享了StableDiffusion的全面教程 然而&#xff0c;仍有些读者提出&#xff0c;虽然他们已经成功地安装了此工具&#xff0c;但生成的作品与我展示的相差较大。那么&#xff0c;如何缩…

TM1638的8个LED灯和8个数码管的使用

一、模块介绍 上图为使用的模块&#xff0c;顶部8个LED&#xff0c;8个数码管&#xff1b;中间TM1638芯片&#xff0c;右侧是8个二极管&#xff08;非发光二极管&#xff09;&#xff1b;最下方是8个按键。 电路图如下图所示 二、TM1638 1、数据传输格式 在传输数据时&#x…

Java“牵手”快手商品详情数据,快手商品详情接口,快手API接口申请指南

快手商城是快手小店平台和快手进口电商平台的公域导购场景&#xff0c;也是快手的在线购物平台。 用户打开快手APP后点击"商城"即可进入&#xff0c;在商城首页信息流、商城品类频道&#xff08;如女装、百货、家电频道等&#xff0c;其中&#xff0c;部分频道的商品…

如何用思维导图做笔记

思维导图是一个强大的学习工具&#xff0c;可以帮助我们更好地整理和梳理学习内容。好的笔记可以帮助我们在考试前夕事半功倍。大大提高效率。秒变学霸小达人。 今天我们就结合思维导图&#xff0c;告诉大家如何做出一份出色的思维导图笔记。 5R笔记法是一种用于学习和记笔记…

day6_C++

day6_C 模板 栈模板 队列思维导图 模板 栈 stack.h #ifndef STACK_H #define STACK_H#include <iostream> #include <cstring>using namespace std;#define MAX 5template<typename T> class Stack { public:/*构造函数*/Stack();/*拷贝构造函数*/Stack(co…

看板管理:以可视化方式确定任务优先级

确定工作的优先级是我们今天都要面对的挑战。若处理不当&#xff0c;我们就可能试图一心多用&#xff0c;从而严重损害工作效率。 使用看板方法来设定工作优先级是一种非常直观、快速的方法。 确定工作优先级的看板方法 看板工作流程管理方法的核心在于工作可视化。工作被划…

邀请函 | 什么是全协议存算一体化解决方案?

近日&#xff0c;趋动科技与 XSKY星辰天合联合推出了针对教育行业的全协议存算一体化解决方案&#xff0c;实现了最小规模&#xff08;3 节点&#xff09;的人工智能算力和存力资源池化的基础设施平台建设&#xff0c;帮助客户共享数据中心内所有服务器商的 GPU 算力以及存力&a…