TypeScript 编译选项

news2024/9/22 1:32:54

编译TS

编译 .ts 文件:

tsc app.ts

执行命令tsc app.ts 可以把 单个文件 app.ts编译成 app.js
这个命令需要每次编译时手动执行。

自动编译文件

tsc app.ts -w
// 或者
tsc app.ts --watch

通常 -w--watch 指令用于启动 TypeScript 编译器的监视模式。

编译文件时,使用 -w--watch 指令后,TS编译器会监视指定的 TypeScript 文件或文件目录。如果任何被监视的文件发生变化,编译器会自动重新编译这些文件,确保生成的 JavaScript 文件始终是最新的。

注意:自动编译在保存代码后才开始执行。

自动编译整个项目

假设项目目录如下:

project/
├── src/
│   ├── index.ts
│   └── utils.ts
├── tsconfig.json
└── dist/
  • 在项目根目录下运行 tsc 命令,会自动将当前项目下的所有.ts文件编译为.js文件。
  • 在项目根目录下运行tsc -w命令,编译器会监视 src 目录下的所有 .ts 文件。
    当对 index.tsutils.ts 进行修改并保存时,编译器会自动重新编译这些文件,并将生成的 JavaScript 文件输出到 对应的 目录中(这个对应的目录配置在tsconfig.json)。

以上两个操作能成功实现的前提是:先在项目根目录下创建一个 ts 的配置文件tsconfig.json

创建tsconfig.json文件

  • 手动创建:在项目的根目录下创建一个名为 tsconfig.json 的文件。
  • 使用命令行工具自动生成:
tsc --init

执行命令后,在当前目录下生成一个 tsconfig.json 文件,其中包含了一些默认的配置选项。

有了tsconfig.json 文件后,即使文件里没有任何配置,也能成功执行 tsctsc -wtsc --watch命令。
命令执行成功后,.ts文件和编译后的.js文件在同一个目录下。
在这里插入图片描述

配置 tsconfig.json

tsconfig.json是 TypeScript 项目的配置文件,用于指定 TypeScript 编译器的编译选项。
ts 编译器可以根据它的信息来对代码进行编译。

基本结构

{
  "compilerOptions": {
    // 编译器选项
  },
  "include": [
    // 要包含的文件或目录
  ],
  "exclude": [
    // 要排除的文件或目录
  ]
}

配置选项

注意:** 表示任意目录, * 表示任意文件

include

  • 指定要包含在编译中的文件或目录。
  • 默认值:["**/*"]
  • include是一个数组,其中的每个元素可以是以下的形式:
    • 具体的文件路径:例如 "src/index.ts",指定单个 TypeScript 文件。
    • 目录路径:例如 "src",表示包含指定目录下的所有 TypeScript 文件。可以使用通配符来进一步指定要包含的文件,例如 "src/**/*" 表示包含 src 目录及其子目录下的所有文件。

示例:

{
  "compilerOptions": {
    // 编译器选项
  },
  "include": [
    "src/**/*",
    "tests/**/*.ts"
  ],
  "exclude": [
    // 要排除的文件或目录
  ]
}

在这个例子中,include 数组指定了两个路径:

  • "src/**/*":表示包含 src 目录及其子目录下的所有文件。
  • "tests/**/*.ts":表示包含 tests 目录及其子目录下的所有以 .ts 结尾的文件。

exclude

  • 指定要被 TypeScript 编译器排除的文件或目录。
  • 默认值:["node_modules", "bower_components ", "jspm_packages"]
  • exclude是一个数组,其中的每个元素可以是以下的形式:
    • 具体的文件路径:例如 "src/ignoredFile.ts",指定单个要排除的 TypeScript 文件。
    • 目录路径:例如 "node_modules",表示排除指定目录下的所有文件。可以使用通配符来进一步指定要排除的文件,例如 "src/**/*.test.ts" 表示排除 src 目录及其子目录下所有以 .test.ts 结尾的文件。

示例:

{
  "compilerOptions": {
    // 编译器选项
  },
  "include": [
    "src/**/*"
  ],
  "exclude": [
    "node_modules",
    "dist",
    "src/ignoredDirectory/**/*"
  ]
}

在这个例子中,exclude 数组指定了三个路径:

  • "node_modules":排除项目中的所有 node_modules 目录,这是常见的做法,因为通常不需要编译第三方库的代码。
  • "dist":排除已经生成的输出目录,避免重复编译已有的编译结果。
  • "src/ignoredDirectory/**/*":排除 src 目录下的 ignoredDirectory 子目录及其所有内容。

extends

  • 允许一个配置文件继承另一个配置文件的设置。
  • 注意事项:
    • 继承顺序:如果多个配置文件相互继承,继承的顺序是从最基础的配置文件开始,依次向当前配置文件传递。如果多个配置文件中存在相同的设置,后面的配置文件会覆盖前面的设置。
    • 相对路径:extends 属性中指定的路径可以是相对路径或绝对路径。相对路径是相对于当前配置文件所在的目录。
    • 循环继承:要避免配置文件之间的循环继承,这会导致编译错误。

示例:

{
  "extends": "./config/base",
  // "extends": "./config/base.json", // 两种写法都可以
  "compilerOptions": {
    // 编译器选项
  },
  "include": [
  	// 要包含的文件或目录
  ],
  "exclude": [
  	// 要排除的文件或目录
  ]
}

在这个例子中,当前配置文件中会自动包含config目录下base.json中的所有配置信息。

files

  • 用于指定一个明确的被编译文件列表。当项目中只有很少的文件需要编译时,这个属性才被使用。

示例:

{
  "compilerOptions": {
    // 编译器选项
  },
  "files": [
    "file1.ts",
    "file2.ts"
  ]
}

在这个例子中,只有file1.tsfile2.ts这两个文件会被 TypeScript 编译器编译。

compilerOptions

tsconfig.json 文件中,compilerOptions 是一个非常重要的部分,用于配置 TypeScript 编译器的各种选项。

  • target
    • 指定编译生成的 JavaScript 代码的目标版本。
    • 可选值:‘es3’(默认值), ‘es5’, ‘es6’, ‘es2015’, ‘es2016’, ‘es2017’, ‘es2018’, ‘es2019’, ‘es2020’, ‘es2021’, ‘es2022’, ‘es2023’, ‘esnext’。

示例:

{
  "compilerOptions": {
  	"target": "es6"  // es6 和 es2015是一模一样的,推荐使用es6/es2015
  },
}

在示例中,指定项目中的ts代码将被编译为ES6版本的js代码。

  • module
    • 指定生成的模块系统类型(指定要使用的模块化的规范)。
    • 可选值:‘none’, ‘commonjs’, ‘amd’, ‘system’, ‘umd’, ‘es6’, ‘es2015’, ‘es2020’, ‘es2022’, ‘esnext’, ‘node16’, ‘nodenext’, ‘preserve’。

示例:

{
  "compilerOptions": {
  	"module": "es6"  // es6 和 es2015是一模一样的,推荐使用es6/es2015
  },
}
  • outDir
    • 指定输出目录。编译后的 JavaScript 文件将被输出到这个目录。
    • 可以将编译后的文件与源文件分开管理,使项目结构更加清晰。

示例:

{
  "compilerOptions": {
  	"outDir": "./dist" 
  },
}
  • rootDir
    • 指定输入文件的根目录。如果不指定,默认是包含 tsconfig.json 文件的目录。
    • 用于控制编译器在查找源文件时的根目录,有助于组织项目结构。

示例:

{
  "compilerOptions": {
  	"outDir": "./dist" 
  },
}
  • strict:所有严格模式的总开关。开启严格模式,包括严格的类型检查、空值检查等。

    • "strictNullChecks"要求在代码中明确处理可能为 nullundefined 的值。
    • "noImplicitAny" 不允许隐式的 any 类型,强制开发者明确指定变量的类型。
    • "strictFunctionTypes":对函数类型进行更严格的检查。
    • "strictBindCallApply":对 bindcallapply 的使用进行严格检查。
    • "strictPropertyInitialization":要求类的属性在构造函数中或声明时进行初始化。
    • strict 设置为 true 时,它会开启 上面列举的 类型检查和代码规范。TypeScript 编译器会在生成的 JavaScript 文件的开头添加 "use strict"; 语句。
  • experimentalDecorators

    • 是否启用实验性的装饰器支持。
    • 默认值是false,不启用。当设置为 true 时,TypeScript 编译器将识别和处理装饰器。
  • sourceMap

    • 生成源映射文件。
    • 方便在调试时将编译后的代码映射回原始的 TypeScript 代码。
  • declaration

    • 生成 .d.ts 声明文件,用于在其他项目中使用该模块时提供类型信息。
    • 声明文件可以让其他项目在使用你的模块时获得类型提示,提高开发效率。
  • lib

    • 指定要包含在编译中的 JavaScript 库(宿主环境)。
    • 正常情况下,前端代码在浏览器中运行,是不需要设置lib的。在tsconfig.json中,默认情况下,是被注释的。

示例:

{
  "compilerOptions": {
    "lib": [
      "es2015",
      "dom"
    ]
  }
}
  • outFile
    • 将多个编译后的 JavaScript 文件合并输出到一个单一的文件中。
    • 仅支持配置项module是 “amd” 、 “system” 模块。

示例:

{
  "compilerOptions": {
    "outFile": "output.js"
  }
}

在这个例子中,TypeScript 编译器会将所有编译后的 JavaScript 代码合并输出到 output.js 文件中。

  • allowJs

    • 是否允许 TypeScript 编译器编译 JavaScript 文件。
    • 默认值是false
  • checkJs

    • 是否对 JavaScript 文件进行类型检查。
    • 默认值是false
  • removeComments

    • 在编译过程中是否删除 TypeScript 代码中的注释。
    • 默认值是false,保留注释。
    • 当设置removeCommentstrue,编译器在编译过程中会删除所有的注释。
  • noEmit

    • TypeScript 编译器是否生成输出文件。
    • 默认值为false。
    • 当设置 noEmittrue 时,TypeScript 编译器只会进行类型检查,而不会生成任何输出文件(如 JavaScript 文件或声明文件)。这对于在不生成实际代码的情况下检查代码的类型正确性非常有用。
  • noEmitOnError

    • 在编译过程中出现错误时是否生成输出文件。
    • 默认值是false
    • 当设置为 true 时,如果在编译过程中检测到任何错误,TypeScript 编译器将不会生成输出文件(如 JavaScript 文件或声明文件)。
  • alwaysStrict

    • 是否始终以严格模式编译代码。
    • 默认值是false。在默认情况下,不强制以严格模式编译代码。
    • 当设置为 true 时,TypeScript 编译器会在生成的 JavaScript 文件的开头添加 "use strict"; 语句,启用严格模式。
  • noImplicitAny

    • 是否禁止隐式的 any 类型。
    • 默认值是false
    • 当设置 noImplicitAny 为 true 时,TypeScript 编译器将不允许隐式地将变量类型推断为 any。如果一个变量的类型没有被明确指定,并且无法从上下文推断出具体类型,编译器将报告错误。
  • noImplicitThis

    • 是否禁止隐式的 this 类型。
    • 默认值是false
    • 当设置 noImplicitThistrue 时,TypeScript 编译器将不允许在函数内部隐式地使用 this。在函数内部添加更多的类型标注来明确 this 的类型。
  • strictNullChecks

    • nullundefined 进行更严格的处理。
    • 默认值为false
    • 当设置 strictNullCheckstrue 时,TypeScript 要求开发者明确指定变量是否可以为 null 或 undefined。

其它

  • compilerOptions 全部配置项详解
  • 文档中的编译选项。

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

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

相关文章

梅丽尔·斯特里普表演艺术家中心对外开放并恢复线下活动 体现了她的“卓越”

梅丽尔斯特里普表演艺术家中心对外开放并恢复线下活动 体现了她的“卓越” 2024-08-14 20:38 发布于:河北省 该中心将为美国演员工会和美国电视广播艺人协会的艺术家提供资源和机会,而且全部免费 同时命名的还有汤姆汉克斯和丽塔威尔逊放映室、妮可…

工业WiFi网关在工业领域的具体应用-天拓四方

工业WIFI网关在工业领域的应用已经变得极为广泛,它不仅是连接工业设备、传感器与云平台之间的桥梁,更是推动工业智能化和自动化的重要动力。下面将进一步详细介绍工业WiFi网关在工业领域的一些具体应用。 工业自动化生产: 在工业自动化生产…

算法力扣刷题记录 八十一【343. 整数拆分】

前言 动态规划第8篇。记录 八十一【343. 整数拆分】 一、题目阅读 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。返回 最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 …

货代企业转型海外仓,会面临哪些难点?

根据数据统计,跨境电商出口B2C物流市场规模已经达到3825亿元,其中海外仓物流以2102亿的规模以及55%的市场份额成为主流。从细分领域看,其中FBA物流、第三方仓、自建仓的市场规模分别达到1156亿、736亿、210亿。 在跨境物流行业中&#xff0c…

uniapp粘贴板地址识别 address-parse插件的使用

1&#xff1a; 插件安装 主要是依靠 address-parse 这个插件&#xff1a; 官网 收货地址自动识别 支持pc、h5、微信小程序 - DCloud 插件市场 // 首先需要引入插件 npm install address-parse --save 2&#xff1a;html部分 <view class""><view class&quo…

QT、C++简单界面设计

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {---------------------窗口设置----------------------this->setWindowTitle("南城贤子摄影工作室");//设置窗口标题this->setWindowIcon(QIcon("d:\\Pictures\\C…

并发编程 | 线程池的手动创建

手动创建线程的弊端 在前面我们讲了手动创建线程的使用方式&#xff1a;当一个任务过来&#xff0c;创建一个线程&#xff0c;线程执行完了任务马上又销毁&#xff0c;然后下一次任务过来又重新创建线程&#xff0c;执行完任务再销毁&#xff0c;周而复始。 那么会导致这样一…

【数据结构】-----红黑树

目录 前言 一、what is it&#xff1f; 二、How achieve it&#xff1f; Ⅰ、结点类 Ⅱ、实现 插入 情况一&#xff1a;叔叔存在且为红色 情况二&#xff1a;叔叔不存在或者叔叔为黑色 旋转 验证 ①验证中序遍历 ②验证是否满足红黑树的性质 Ⅲ、完整实现代码 三、A…

【课程总结】day22:Qwen模型的体验

前言 在上一章【课程总结】day21&#xff08;下&#xff09;&#xff1a;大模型的三大架构及T5体验中&#xff0c;我们体验了Encoder-Decoder架构的T5模型。本章内容&#xff0c;我们将以Decoder-Only架构的Qwen模型入手&#xff0c;了解Qwen模型结构、聊天模板的概念以及通过…

类型注解-type hint

目录 一、基本介绍 1、为什么需要类型注解 2、类型注解作用和说明 二、变量的类型注解 1、基本语法 2、基本数据类型注解 3、实例对象类型注解 4、容器类型注解 5、容器详细类型注解 6、在注释中使用注解 三、函数(方法)的类型注解 1、基本语法 2、代码演示 四、…

WebService基础学习

一、XML回顾 二、HTTP协议回顾 三、复习准备 四、关于Web Service的几个问题 五、Web Service中的几个重要术语 六、开发webservice 七、WebService面试题

python面向对象三大特征之---封装,私有属性和私有方法,property功能; 继承,重写,object类;多态;类的深拷贝和浅拷贝

1.面向对象三大特征 封装 1.类属性的创建&#xff1a; 2.属性的访问&#xff1a; 私有属性和方法在类外访问的方法也有&#xff1a;不推荐 对象名._类名__私有方法() 对象名._类名__私有属性3.property功能 在Python中&#xff0c;property 是一个内置的功能&#xff0c;它…

jar包在linux无法直接获取resources文件夹下的文件

windows下&#xff0c;通过hutool的FileUtil.file()就可以获取到文件&#xff0c;通过MailUtil.send()将邮件带附件的方式成功&#xff0c;携带附件发邮件。 linux下部署&#xff0c;截图中的FileUtil.file()是拿不到文件的&#xff0c;报IOException while sending message&a…

「团结引擎1.2.0」正式上线!功能全面升级

「团结引擎 1.2.0」来啦&#xff0c;继上次大版本更新又过了三个月&#xff0c;这段时间我们的研发团队一直在收集用户反馈&#xff0c;更新引擎功能。 本次技术更新的内容&#xff0c;涵盖了微信小游戏、团结引擎车机版、OpenHarmony、Audio、Virtual Geometry、Open Euler/A…

开发食堂采购系统源码:优化供应链管理APP的技术路径

当下&#xff0c;开发一个食堂采购系统源码&#xff0c;并将其集成到供应链管理APP中&#xff0c;成为了优化供应链管理的关键路径之一。 一、食堂采购系统的需求分析 食堂采购系统是食堂日常运营中不可或缺的工具&#xff0c;其主要功能包括采购需求管理、供应商管理、订单管…

《中国数据库前世今生》——历史的深度与未来的展望

在探索科技与历史的交织中&#xff0c;我有幸观看了《中国数据库前世今生》这部纪录片。影片开头它不仅是一段技术演进的回顾&#xff0c;更是中国IT领域从跟随到引领的壮丽史诗。后续深刻研读了专家们的深刻讨论&#xff0c;通过这部纪录片&#xff0c;我深刻感受到了数据库技…

PMP–知识卡片--沟通模型

沟通过程中&#xff0c;发送方想把自己的想法传递给接收方&#xff0c;需要先对想法进行编码&#xff0c;将其变成语言或文字&#xff0c;再选择传递的方式&#xff0c;过程中会受到噪声的影响。这里的噪声是广义的&#xff0c;包括所有影响信息传递效果的因素&#xff0c;如杂…

《Ubuntu22.04环境下的ROS2学习笔记2》

一、在ROS2环境下创建功能包 如果您已经完成了上一小节的内容&#xff0c;那么接下来您一定渴望自己创建一个功能包来实现相应的功能。在ROS1中&#xff0c;您创建的功能包可以既写C/C&#xff0c;又写python&#xff0c;但ROS2中不允许用户这么做&#xff0c;您的C/C和python代…

UniApp的神器-开启前端开发的全新篇章

本文介绍了DIYGW UniApp可视化工具作为一款低代码开发平台的特点和优势。该工具采用拖拽式设计和模块化开发&#xff0c;能够快速转化想法为可运行应用&#xff0c;并支持多种平台部署。它具有所见即所得的设计体验、丰富的组件库、前后台通信模块和跨平台兼容性等特点。使用该…

netsat -ano 详解

netsat -ano会输出一大堆端口&#xff0c;为什么nmap扫描出来的却只有两个 因为我们的服务器或者工作站有开启防火墙&#xff0c;过滤了nmap的流量&#xff0c;导致nmap扫描不到一些端口&#xff0c;再加上我们的开放端口有一些是只有本地才能访问的 怎么看哪些端口只有本地能…