热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TypeScript第一天学习记录

2022年10月29日19点17分1.TypeScript是什么1.1TypeScript是什么?TypeScript(简称:TS)是JavaScript的超集(JS有的TS都有)

2022年10月29日19点17分


1.TypeScript是什么


1.1 TypeScript是什么?

TypeScript(简称:TS)是Javascript的超集(JS有的TS都有)

TypeScript = Type+Javascript(在JS基础之上,为JS添加了类型支持)

TypeScript是微软开发的开源编程语言,可以在任何运行Javascript的地方运行

//TypeScript代码:有明确的类型,即:number(数值类型)
let age1: number=16
//Javascript代码:无明确的类型
let age2 = 16

1.2 TypeScript为什么要为JS添加类型支持?


背景:

JS的类型系统存在“先天缺陷”,JS代码中绝大部分错误都是类型错误(Uncaught TypeError)


问题:

增加了找Bug、改Bug的时间,严重影响了开发效率

 

从编译语言的动静来区分,TypeScript属于静态类型的编程语言,JS属于动态类型的编程语言。


静态类型:

编译期做类型检查


动态类型:

执行期做类型检查


代码编译和代码执行的顺序:

①编译

②执行

 


对于JS来说:

需要等到代码真正去执行的时候才能发现错误(晚)


对于TS来说:

在代码编译的时候(代码执行前)就可以发现错误(早)

并且,配合VSCode等开发工具,TS可以提前到在编写代码的同时发现代码中的错误,减少找bug,改bug的时间

 


1.3 TypeScript相比JS的优势

①更早(写代码的同时)发现错误,减少找Bug、改Bug的时间,提升了开发效率

②程序中任何位置的代码都有代码提示,随时随地的安全感,增强了开发体验

③强大的类型系统提升了代码的可维护性,使得重构代码更加容易

④支持最新的ECMAScript语法,优先体验最新的语法,让你走在前端技术的最前沿

⑤TS类型推断机制,不需要在代码中的每个地方都显示标注类型,让你再享受优势的同时,尽量降低了成本

 

除此之外,Vue3源码使用TS重写、Angular默认支持TS、React与TS完美配合,TypeScript已成为大中型前端项目的首先的编程语言

 


2.TypeScript初体验


2.1安装编译TS的工具包


问题:为什么要安装编译TS的工具包?

回答:

Node.js/浏览器,只认识JS的代码,不认识TS代码。需要先将TS代码转化为JS代码,然后才能运行


安装命令:

npm i -g typescript

typescript包:

用来编译TS代码的包,提供了 tsc命令,实现了TS->JS的转化。


验证是否安装成功:

tsc -v //插件typescript的版本

2.2编译并运行TS代码

①创建hello.ts文件(注意:TS文件的后缀名是.ts)

②.将TS编译为JS:在终端中输入命令,tsc hello.ts(此时,在同级目录中会出现一个同名的JS文件)

③执行JS代码:在终端中输入命令,node hello.js


说明:

所有合法的JS代码都是TS代码,有JS基础只需要学习TS的类型即可


注意:

由TS编译生成的JS文件,代码中就没有类型信息了


编译后报错:

因为JS文件和TS文件重复声明变量导致报错

①关闭js文件后就不会报错了

②控制台输入tsc -- int 生成tsconfig.json配置文件也可以解决报错


2.3简化运行TS的步骤


问题描述:

每次修改代码后,都要重复执行两个命令,才能运行TS代码,太繁琐


简化方式:

使用ts-node包,”直接“在Node.js中执行TS代码


安装命令:

npm i -g ts-node(ts-node包提供了ts-node命令)

使用方式:

ts-node hello.ts

解释:

ts-node命令在内部偷偷地将TS转换成JS后再执行JS代码


19点59分

 


23点00分


3.TypeScript常用类型

概述:

TypeScript是JS的超集,TS提供了JS的所有功能,并且额外增加了:类型系统

①所有的JS代码都是TS代码

②JS有类型(比如 number、string等),但是JS不会检查变量的类型是否发生变化。而TS会检查。TypeScript类型系统的主要优势:可以显示标记出代码中的意外行为,从而降低了发生错误的可能性


3.1.类型注解

//示例代码
let age: number = 18

说明:代码中的:number就是类型注解 作用:为变量添加类型约束。比如,上述代码中,约定变量age的类型为number(数值类型)

解释:约定了什么类型,就只能给变量赋值改类型的值,否则会报错


3.2.常用基础类型

概述:可以将TS中的常用基础类型细分为两类:①JS已有的类型 ②TS新增的类型


①JS已有类型:

原始类型:number/string/boolean/null/undifined/symbol

对象类型:Object(包括了数组、对象、函数等对象)


②TS新增类型

联合类型、自定义类型(类型别名)、接口、元组、字面量类型、枚举、void、any等


3.3原始类型


特点:

number/null/undifined/symbol/string/boolean

简单。这些类型完全按照JS中类型的名称来书写的


3.4数组类型


特点:

对象类型,再TS中更加细化,每个具体的对象都有自己的类型语法

数组类型的两种写法:(推荐使用number[]写法)

let numbers: number[] = [1,3,5]
let Strings: Array<string> = ['a','b','c']

联合类型:

let arr: (number | string)[] = [1,'a',2,'b']
let arr: number | string[] = [1,2]
let arr: (number | string)[] = ['a','b']

解释:|(竖线)在TS中叫来联合类型(由两个或者多个其他类型组成的类型,表示可以是这些类型中的任意一种)

注意:①这是TS中联合类型的语法,只有一根竖线

②添加的小括号表示,首先是数组,然后这个数组中能够出现number或者string类型的元素

③不添加小括号表示,既可以是number类型,也可以是string类型,但是只能是其中一个


3.5类型别名

类型别名(自定义类型):为任意类型起别名。

使用场景:当同一类型(复杂)被多次使用时,可以通过类型别名。简化改类型的使用

type CustomArray = (number | string)[]
let arr1: CustomArray = [1,'a',2,'g']
let arr2: CustomArray = [1,'a',2,'g']

解释:

1.使用type关键字来创建类型别名

2.类型别名(比如,此处的CustomArray),可以是任意合法的变量名称

3.创建类型别名后,直接使用该类型别名作为变量的类型注解即可


3.6函数类型

函数的类型实际上指的是:函数参数和返回值的类型。


为函数指定类型的两种方式:

①单独指定参数、返回值的类型

function add(num1: number,num2: number): number{
 return num1+num2
}

const add = (num1: number, num2: number): number=>{
 return num1 + num2
}

 

②同时指定参数、返回值的类型

const add: (num1: number, num2: number)=>number =(num1,num2)=>{
 return num1+num2
}

解释:当函数作为表达式的时候,可以通过类似箭头函数形式的语法来为函数添加类型。

注意:这种形式只适用于函数表达式

如果函数没有返回值,则设置函数返回值的类型为void

function greet(name: string): void{
 console.log('safsa');
}

 

使用函数实现某个功能的时候,参数可以传也可以不传。这种情况下,在给函数参数指定类型时,就用到可选参数了。比如,数组的slice方法,可以slice ()也可以slice(1)还可以slice(1,3)

function mySlice(start?: number, end?: number): void{
 console.log('起始索引:',start,'结束索引: ',end);
 
}


mySlice() //起始索引: undefined 结束索引 undefined
mySlice(1) //起始索引: 1 结束索引 undefined
mySlice(1,2) //起始索引: 1 结束索引 2  

可选参数:在可传可不传的参数名称后面添加?(问好)

注意:可选参数只能出现在参数列表的 最后,也就是说可选参数后面不能再出现必选参数

2022年10月30日00点29分



推荐阅读
  • 前言小伙伴们大家好。从今天开始我们将从 ... [详细]
  • 小编给大家分享一下TypeScript2.7有什么改进,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收 ... [详细]
  • TS-入门学习笔记TypeScript是JavaScript的一个超集,主要提供了类型系统和对ES6的支持。与js相比,最大的有点是类型系统的引入,由于js本身是弱类型语言,所以天 ... [详细]
  • 我试图在Angular2应用程序中使用元素调整大小检测器库(https:github.comwnrelement-resize-detector).根据我有限的JS模块知识,该库似 ... [详细]
  • 深入理解TypeScript认识TypeScript&配置详解
    为什么使用TypeScript?最初使用TypeScript开发项目的时候,觉得很繁琐,定义每一个变量还要加上类型,尤其是对象形式的,几乎每一个用到的都要定一个接口,还要为每一 ... [详细]
  • 写在文章前这篇文章翻译自ASYNCAWAITWILLMAKEYOURCODESIMPLER,这是一篇写于2017年八月的文章,并由某专栏提名为17年十大必读文章。翻译的不好的处所, ... [详细]
  • TypeScript上手教程
    无疑,对于大型项目来说,VanillaJs无法满足工程需求。早在2016年Anuglar在项目中引入TypeScript时,大概也是考虑到强类型约束对于大型工程的必要性,具体选型考 ... [详细]
  • idea不编译js是什么,js不需要编译
    本文目录一览:1、idea引入js显示不能解析html ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 业务:Payments&Risk大数据/AI/数据可视化时间要求:至少实习6个月,每周5天,入职时间4-5月 ... [详细]
  • 用typescript来写npm模块还不知道typescript是啥的前端童鞋需要做下功课了。随着es6的普及,越来越多的npm模块都开始用es6编写或者重构,看上去或者听起来都挺 ... [详细]
author-avatar
伊丽汇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有