TypeScript

关于TypeScript,我也没学过,写这篇文章就是写我自己的理解,有不对的地方希望大家多指点一下。

这个错误只有在编译的时候才会发现,ts就会解决这个问题,ts每个文件都是一个模块,不加会认为是全局。

已经增加类型了只不过是任意类型,这个叫联合类型对象属性,并且获取到的length是Number类型,需要小写,

在查看版本,建立的文件要.ts结尾

生成JS代码,然后引入html中,想要不这么运行可以安装这个库需要依赖这个包,运行就是 ts-node helloWorld.ts

语法:

给标识符添加类型注解,

数组类型:

在开发中,数组的数据类型要保持一致,

数组存放字符串类型,另一种写法Array<string>

  对象:

这个是空对象类型,开发不会这么写

这个图是let info={}这个报错得原因是没有和类型保持一致

函数类型和对象类型得结合使用:

可选类型

null,undefined类型:

函数参数的类型:

在定义函数时,都要明确指定参数类型,返回值会自动推导,也可以明确指定,

如果写any就无法校验类型,我们可以定义对象类型

建议把返回值也写上

匿名函数得参数类型

any类型:

unknown类型:

和any类型相似,但是unknown类型得值上做任何事情都是不合法得,any是都合法

非法,不知道是什么类型,用unkonow必须要用类型校验

void类型,一个函数没有返回值:

,void可以返回undefined

应用场景,这样只能穿函数,传别的会报错,没有明确返回值才加void,类型推导出来得void可以有返回值并且不会报错

never类型:实际开发用不到,会自动推导出来

这个数组什么都不会放结果就是never类型,

这个default后面是永远不会执行的,所以check是never类型,不写也可以运行,为什么要写上

假如别人调用这个函数,传入的是布尔值,

他在类型校验处加上了boolean类型,但是这个封装的函数没有对布尔类型做处理,如果加上这段代码,当传入的是布尔值,走的是默认模块,但是check的类型是never类型,不是布尔类型,这时,这个位置就会报错,间接的提示case应该加一个布尔类型

元组类型tuple:

,这种方法是可以存储数据,但是拿到某一个数组中的数据,value是没有类型的,因为info1是一个数组,并且数组里面的数据是any类型,

第二种方法就是对象

这样就会显示类型,

元组类型

这种表示就是元组类型,相对于数组优点,元组可以存放不同的数据结构,取出来的item也是有类型的

在函数中使用元组是最多的

这么写就是可以看到数组里面的类型,这个是react

语法细节

联合类型和交叉类型:

联合类型:或者的意思,但是这么做的时候用方法需要类型缩小

类型别名:

  这么写会造成阅读较差

这时候可以做抽取,给这种类型起一个别名 

别名可以复用 

接口声明: 

这两个用法一样,都可以声明对象类型

type和interfacv区别

区别一:

type类型可以声明基本类型,使用范围更广

而接口类型只能声明对象,

区别二:

type不许相同别名同时存在,接口声明可以,

这样写会报错,要这么写,

区别三:

接口声明可以继承类型

必须同时满足

交叉类型:  

交叉类型场景

类型断言:

,返回的是确切的类型

使用类选择器的话,会报错,因为不知到是绑定在img上还是div上,img1拿到的是element类型,因为element类型上没有src和alt,所以会报错,

这个时候就可以用类型断言as

,这样就相当于强制转换类型,此时imgE1就是as后面的那个类型了,然后就可以不用写判断了,

已经确定类型,就可以用类型断言,

类型断言的规则:

,不可以这么断言,断言只能断言成更加具体的类型或者不太具体的类型,但是尽量不要断言成不太具体的类型

非空类型断言:

访问的角度可以用可选链,但是给属性赋值不可以

赋值表达式左边不可以用可选链,这个是语法问题,从编译的角度就报错了,解决方法一,类型缩小,解决方法二:非空断言:意思就是,强制告诉Ts 不用检查他是否为空,一定要确保有值的情况,这种会跳过ts编译,慎重用。

字面量类型:

,只能选择字面量

举例子:封装请求方式,第二个参数,想传get或者post,

ts细节:这么做会报错的原因就是这个对象的类型里面,method现实的是字符串类型,怎么解决这个问题?

可以用类型断言:,还可以让info变成字面量类型  

字面量推理

,嫌弃这种麻烦还可以,readonly是只读类型,强制变成字面量类型

类型缩小:

平等缩小:(类型缩小的一种)

instanceof,是否是这个类的实例(类型缩小的一种)

in操作符,anmial里面是否有key为swim的属性(类型缩小的一种)

TS中函数的类型

函数的参数有类型,函数的返回值有类型,但这两个都是函数的一部分,函数本身也是一个标识符,也应该有自己的类型,

这两个函数是一样的,

如果是any类型的话,那么就不知道bar是什么类型的

在js中函数可以作为一等公民(函数作为参数,也可以作为返回值进行传递),我们可以编写函数类型表达式来表示函数类型

转变成这样

如果写成TS得话

这里注意匿名函数不需要写类型注解

看清楚是传入的函数,这是高阶函数,对里面的函数参数不进行类型检测

调用签名:

这是函数表达式写法,函数是函数,但是,函数的本身也是个对象,从对象的角度看,函数也可以有其他的属性,

表达式只能表达他是一个函数,并不能表达他是一个对象,这时候可以写(使用)成函数的调用签名

开发中如何选择,单独函数就用函数表达式,有属性就用函数调用签名

构造签名:

函数中的可选参数

函数中的默认参数

函数的剩余参数接收

函数重载:

从这张图片中可以看出arg1和arg2都是any类型,这么做怎么调都不会报错,第一种方法可以

函数内部执行逻辑相同,第二种

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值