TypeScript初识

news2024/9/23 7:44:47

目录

介绍

定义

优点

类型声明

ts文件编译选项

自动编译

编译选项的各个属性

include   

compilerOptions


介绍

定义


TS(TypeScript)是一种由微软开发的编程语言,它是 JavaScript 的一个超集,提供了静态类型检查、类、接口、泛型等特性,可以在大型项目中提供更好的代码可读性、可维护性和可靠性。

优点

更严格的类型检查:TypeScript 强制要求变量、函数和对象的类型必须定义清楚,可以在编码阶段捕捉一些潜在的错误,提高代码可靠性。
更好的代码提示:TypeScript 可以在编辑器中提供更好的代码提示和补全,减少编码错误。
更好的可读性和可维护性:由于 TypeScript 的强类型特性和更严格的语法规范,代码可读性和可维护性得到了提高。
另外,TypeScript 还支持 ES6+ 的语法,并且可以与现有的 JavaScript 应用程序和库一起使用,因此是一个非常强大的编程语言

类型声明

类型声明是ts中非常重要的特点

通过类型声明可以指定ts中变量(参数 形参)的类型

指定类型后 当为变量赋值时 ts编译器会自动检查值是否符合类型声明 符合则赋值 否则报错

类型声明给变量设置了数据类型后 使得变量只能存储某种类型的值

语法:

let 变量名 : 类型

let 变量名 : 类型 = 值;

function fn(参数名 : 类型,参数名: 类型.....): 返回数据类型 {

....

//声明一个数字类型
let aa : number = 12;

//声明一个字符串类型
let bb : string;
bb = '你好'
//声明一个boolearn类型
let cc = true;
//声明一个函数,两个参数都是数字类型,设置返回数据类型也是数字
function fangfa(a:number,b:number):number{
  
    return a+b;
}

自动类型判断 

ts拥有自动的类型判断机制

当对变量的声明和赋值是同时进行的 ts编译器会自动判断变量的类型

所以如果变量的声明和赋值是同时进行的 可以省略掉类型声明

类型列表:

//object:

//{} 用来指定对象中可以包含哪些属性

//语法: {属性名: 属性值,属性名:属性值....}

let b: {name:string,age:number}

b = {name:'孙悟空',age:12}

//在属性名后加上? 表示该属性是可选

let c: {name:string,age?:number}

c = {name:'齐天大圣'}

c = {name:'猪八戒',age:12}

//[proName:string] : any 表示任意类型的属性  也就是后面可以选写任意数量和类型的属性

let r :{name:string,[proName:string]:any};

r ={name:'喜羊羊',age:15,sex:'男',weight:45}

//设置函数结构的类型声明
//语法: (形参:类型, 形参:类型...)=>返回值类型
let d :(a:number,b:number)=>number;
d = function(n1:number,n2:number): number{
    return n1+n2;
}


//数组
//string[] 表示字符串数组
let e : string[];
e = ['你好啊','弄','v']

//number[] 表示数值数组 等价于  Array<数据类型>
let f:number[]
f = [1,3,43,3]

let g :Array<number>
g=[123,34,56]


//tuple
//元祖  元祖就是固定长度的数组
// 语法 [类型,类型,类型]
let h:[string,number]
h=['nihao',12]


//enmu 枚举
enum gender{
    male = 0,
    female = 1
}
let i:{name:string,sex:gender};
i={name:'贝吉塔',sex:0}




//type 类型的别名 将一种自定义数据类型起一个别名来使用
//比如我们现在有一种自定义的数据类型  
//2|3|5|6|7|8|9.... 表示我们的数据只能是我们前面定义的数据类型中的数
let yy :2|3|5|6|7|8|9;
yy = 5;
let yi :2|3|5|6|7|8|9;
yy = 7;
//这样书写很麻烦,因为如果我们的自定义数据类型长度特别长的话 这样书写很不方便
//这个时候就需要用到类型的别名进行调整
type custorType = 1|2|3|4;
let kk:custorType;
kk = 4;
let ku:custorType;
ku =3;

ts文件编译选项

自动编译

我们在前面测试ts文件时,每添加修改ts文件时都需要输入 tsc 文件名.ts 对当前的ts文件进行编译,

这样在开发中也是很不方便的,如果有成百上千的ts文件的话就需要一个一个这样编译是很不现实的,所以这里我们可以开启ts文件的自动编译

先看我们的普通编译

编译后

  

将当前ts文件添加为自动编译

在命令行输入 tsc 文件名.ts -w  即可开启当前文件的修改监听编译

我们直接修改ts文件

 

修改ts文件后进行保存后,稍等1~2秒可以看到ts文件被自动编译了

去js文件中便可以看到编译后的内容了

但是这种监听只支持单个ts文件的,如果当前目录中有成百上千的ts文件的话难不成也要一个一个开启监不成吗? 

答案是当然不用,我们可以创建一个ts文件的配置文件来管理ts的批量编译

先准备3个ts文件

 然后再在当前目录下创建一个 tsconfig.json的文件 内容为空对象{}即可

 然后直接在终端输入命令 tsc -w

 

 可以看到自动编译出了3个js文件,此时当前目录下的ts文件全部被监听编译了

tsconfig.json 是ts编译器的配置文件ts编译器可以根据它的信息来对代码进行编译

编译选项的各个属性

include   

用来指定目录下的ts文件被编译

    /** 表示任意目录

    /* 表示任意文件

举例,我们这里准备两个目录,在两个目录下都新建有ts文件 注意目录结构,这里的tsconfig.json文件和那两个目录是同级并列

 

 在include里设置只编译 part2_1的ts文件

 注意:

tsconfig.json修改配置后一定要先保存文件然后再输入命令,终端这里是在tsconfig.json文件所在的目录下执行命令 tsc -w

 可以看到只有part2_1的文件编译有js文件,而part2_2目录下的文件并没有被编译

exclude 

指定不需要被编译的文件目录

我们这里准备三个目录,在前面的目录下再准备part2_3

 

 

 可以看到除了part2_2目录下没有被编译,另外两个目录都被编译了

compilerOptions

  编译选项是配置文件中非常重要也是比较复杂的配置选项

  在compilerOptions中包含多个子选项 用来完成对编译的配置

举例说明各属性

{
    //tsconfig.json 是ts编译器的配置文件
    //ts编译器可以根据它的信息来对代码进行编译
    
    //include  用来指定目录下的ts文件被编译
    // ** 表示任意目录
    // * 表示任意文件
    "include": [
        "./part2_1/*"
    ],

    //exclude 指定不需要被编译的文件目录
    // "exclude": [
    //     "./part2_2/*"
    // ]
    "compilerOptions": {
        //用来指定ts被编译的版本
        "target": "ES2016", 
        // 指定代码运行时所包含的库(宿主环境)
        "lib":["ES2016","DOM"],
        //设置编译后代码使用的模块化系统
        "module": "System",
        //指定编译后文件所在的目录
        "outDir": "./part2_2",
        //指定将编译后的代码合并为一个文件
        "outFile":"./part2_1/app.js",
        //是否对js 文件进行编译 默认是false
        "allowJs": false,
        //是否检查js代码是否符合语法规范 默认是false
        "checkJs": false,
        //编译后是否移除注释
        "removeComments": false,
        //不生成编译后的文件
        "noEmit": false,
        //当有错误时不生成编译后的文件
        "noEmitOnError": true,
        //用来设置编译后的文件是否使用严格模式 默认false
        "alwaysStrict": true,
        //不允许隐式的any类型
        "noImplicitAny": true,
        //不允许不明确类型的this
        "noImplicitThis": true,
        //严格的检查空值
        "strictNullChecks": true,
        //所有严格检查的总开关
        "strict": false

    }
}

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

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

相关文章

Linux系统编程——多线程[中]:互斥与同步

0.关注博主有更多知识 操作系统入门知识合集 目录 1.并发过程中的问题 2.互斥 2.1互斥锁 2.2如何看待互斥锁 2.3加锁和解锁的本质 2.4对锁做一个封装 2.5可重入函数与线程安全 2.6死锁 3.同步 3.1条件变量 1.并发过程中的问题 我们知道&#xff0c;同一个进程中的…

【SpringBoot】过滤器,监听器,拦截器介绍

文章目录 一、简介1、过滤器2、拦截器3、监听器 二、如何创建1、过滤器2、监听器3、拦截器 三、总结 一、简介 通过两幅图我们可以理解拦截器和过滤器的特点 1、过滤器 过滤器是在请求进入tomcat容器后&#xff0c;但请求进入servlet之前进行预处理的。请求结束返回也是&…

模拟IC与数字IC设计该怎么选?哪个岗位薪资高?

很多同学想要入行IC&#xff0c;但不知道数字和模拟方向怎么选&#xff1f; 如果没有亲身体会过模拟设计&#xff0c;并有发自内心的自信或者兴趣&#xff0c;一般不看好纯小白去学模拟电路设计。 模拟设计想做好&#xff0c;没有数学功底&#xff0c;没有电路分析的功底&…

面试题30天打卡-day24

1、Redis 为什么快&#xff1f; Redis 之所以快&#xff0c;主要是因为它具有以下特点&#xff1a; 纯内存操作&#xff1a;Redis 的数据存储在内存中&#xff0c;因此读写速度非常快&#xff0c;而无需像传统数据库一样从硬盘读取和写入数据。与此同时&#xff0c;Redis 支持…

【算法】动态规划算法求(编辑距离)

目录 编辑距离&#xff1a; 举例&#xff1a; 代码如下 调试&#xff1a; 核心代码&#xff1a; 画图演示上述代码&#xff1a; 编辑距离&#xff1a; 是一种计算两个自符串之间差异程度的方法&#xff0c;它通过比较两个字符串之间的插入&#xff0c;删除和 替换操作的数…

深度神经网络模型部署——Docker学习

容器技术中有三个核心概念&#xff1a;容器&#xff08;Container&#xff09;、镜像&#xff08;Image&#xff09;&#xff0c;以及镜像仓库&#xff08;Registry&#xff09; 从本质上来说&#xff0c;容器属于虚拟化技术的一种&#xff0c;和虚拟机&#xff08;Virtual Mac…

CentOS7安装vsftpd

CentOS7安装vsftpd 最近又用到ftp了&#xff0c;摸索了一下终于安装成功&#xff0c;记录下安装过程&#xff0c;本次使用的操作系统为 CentOS7&#xff0c;ftp使用vsftpd。 安装vsftpd yum install -y vsftpd配置vsftpd vsftpd的配置文件路径为&#xff1a;/etc/vsftpd/vs…

软件测试基础面试题大全(上)

1. 软件生命周期是什么&#xff1f; 软件生命周期&#xff1a;需求调研&#xff08;可行性研究&#xff09;、需求分析&#xff08;需求规格说明书&#xff09;、设计&#xff08;系统架构、模块设计、表结构设计、接口设计等&#xff0c;产出概要设计文档和详细设计文档&…

表达式求值问题-双栈模板化实现

好久不见&#xff0c;真的很久都没有更新博客了&#xff0c;最近很多事情&#xff0c;所以比较忙碌&#xff0c;没有时间每天都学算法&#xff0c;但是我会挤时间尽量做到&#xff0c;每两三天就更新博客&#xff0c;我会努力的&#xff0c;加油~ 前言&#xff1a;计算器都见过…

加码本地生活、成为“万能入口”,抖音完成了百度曾经的梦想

文|螳螂观察 作者| 小别 前有美团点评&#xff0c;后有阿里巴巴&#xff0c;本地生活服务从来就不平静。 并没有在最好的时间出发的抖音&#xff0c;还是顺着短视频的内容优势&#xff0c;从团购、本地游、外卖再到近期推出商城频道&#xff0c;逐步完善了本地生活服务的布局…

浅谈jmeter性能测试步骤入门

一、Jmeter简介 1 概述 jmeter是一个软件&#xff0c;使负载测试或业绩为导向的业务&#xff08;功能&#xff09;测试不同的协议或技术。 它是 Apache 软件基金会的Stefano Mazzocchi JMeter 最初开发的。 它主要对 Apache JServ&#xff08;现在称为如 Apache Tomca…

linux命令文本命令之~~~ sort ~~ tr ~~cut ~~ uniq

目录 一. sort命令二. uniq 命令三. tr命令四. cut命令 一. sort命令 以行为单位对文件内容进行排序&#xff0c;也将他根据不同的数据类型来排序 比较原则是从首字符向后&#xff0c;依次按ASCII码进行比较&#xff0c;最后按照升序输出排序 语法格式&#xff1a; sort 【选…

Web自动化测试:selenium的使用以及关于driver=webdriver.Firefox()无驱动报错问题

Selenium 1.什么是Selenium&#xff1f; Selenium是一个用于Web应用程序测试的工具。 主流的自动化测试工具有&#xff1a; web自动化测试&#xff1a;selenium、robot frameworkApp端自动化测试&#xff1a;Appium、Monkeyrunner、UIautomationPC客户端&#xff08;win32&…

打印机错误0x00000bc4,Win11系统找不到打印机怎么办

近期&#xff0c;又有不少小伙伴更新了Win11系统后&#xff0c;出现了打印机提示错误代码0x00000bc4&#xff0c;出现错误后&#xff0c;可能导致打印机无法正常工作&#xff0c;打印任务无法完成&#xff0c;或者打印机无法连接到电脑等问题。驱动人生就为大家带来打印机错误0…

使用docker部署wiki.js

安装docker这些就不讲了&#xff0c;教程一堆&#xff0c;相关的安装教程可以去官网看&#xff0c;只是没那么详细&#xff0c;尤其是有关数据库的配置&#xff1a;Docker 部署 Wiki.js pull wiki镜像&#xff1a; docker pull ghcr.io/requarks/wiki 如果是arm的机器&#xf…

Oracle存储过程~封神之作

简介 Oracle 存储过程是 Oracle 数据库中的一种数据处理对象&#xff0c;它可以在数据库中定义一组预定义的 SQL 语句&#xff0c;用于完成特定的数据库操作。存储过程可以被授权的用户调用&#xff0c;并且可以执行多个语句&#xff0c;这些语句可以被视为一个单独的操作&…

【逗老师的无线电】快速记录一下MMDVM串口屏相关

最近在研究MMDVM的串口屏&#xff0c;设计知识点比较多&#xff0c;本文先随手记一下&#xff0c;同时随时更新&#xff0c;最后形成完整的文档 一、Nextion和国内串口屏设计 MMDVM默认对接的是Nextion屏幕。但是有人跟我说&#xff0c;NXT的屏幕和国内陶晶驰的屏幕就是一个…

每周一算法:差分算法

差分算法 差分是一种常见的算法&#xff0c;用于快速修改数组中某一段区间的值。其基本思想就是预处理出数组的差分数组&#xff0c;然后修改区间时&#xff0c;只需要修改两个位置的值&#xff0c;即可快速完成区间修改。最后再通过差分数组求出原数组。差分算法在区间加、区…

kafka安装及配置

1. 下载 下载地址&#xff1a;Apache Kafka 我这里下载的是 3.2.1 版本。 2. 上传并解压 上传到 linux 下的 /home/software/ 目录下&#xff0c;然后解压 kafka_2.13-3.2.1.tgz 包到/usr/local/ cd /home/software tar -zxvf kafka_2.13-3.2.1.tgz -C /usr/local # -C 选…

【机器学习】信息量、香农熵、信息增益(增加例子,方便理解)

这节可以搭配 【机器学习】Logistic回归&#xff08;重新整理&#xff09;信息量&#xff08;信息&#xff09;信息量公式的推理过程 香农熵信息增益 【机器学习】Logistic回归&#xff08;重新整理&#xff09; B站视频&#xff1a;“交叉熵”如何做损失函数&#xff1f;打包…