5.类型推论,类型断言,类型兼容性

目录

1  类型推论

2  类型断言

2.1  类型推论所带来的问题

2.2  基本使用

2.3  不断言会出现的问题

2.4  断言的另一种写法

2.5  查看DOM元素的类型

3  类型兼容性

3.1  类兼容性

3.2  接口兼容性

3.2.1  接口之间的兼容性

3.2.2  接口与类之间的兼容性

3.3  函数兼容性

3.3.1  参数个数

3.3.2  参数类型

3.3.3  返回值类型


1  类型推论

类型推论是ts自带的机制,有些变量你不需要特意去注释,他就会默认给你一个类型

比如这两种写法就是一样的

你直接给,你后面如果该类型了,还是会提示你错误

5.类型推论,类型断言,类型兼容性_第1张图片

有这个机制你就可以一个变量注解都不写,然后按需写注解就行了

对于函数也是一样,比如下面这个就自动推断出来c是number类型

5.类型推论,类型断言,类型兼容性_第2张图片

2  类型断言

2.1  类型推论所带来的问题

类型断言就是解决错误的类型推测问题的,不是所有的函数都是我们自定声明的,比如console.log()

内置的函数也会给你推测一个类型,有的时候这个是你需要的,都是时候这个不是你需要的,比如 document.querySelector()

document.querySelector()会根据的参数的不同返回不同的结果,这个就比较宽泛了。而且你的ts不主动与html联系的,都是html需要的时候找ts来拿。这个时候ts本身的判定就会出现问题

2.2  基本使用

比如我现在想把alink定义为HTMLAnchorElement类型,那么你可以这样写

这样就能得到你想用的类型了

你直接用冒号写前面是不行的,因为这个是返回值,等于是你的定义与返回值的推论有冲突了

5.类型推论,类型断言,类型兼容性_第3张图片

2.3  不断言会出现的问题

HTMLAnchorElement的意思的a标签元素,如果你不进行类型断言,你用alink的href属性的时候会报错

5.类型推论,类型断言,类型兼容性_第4张图片

5.类型推论,类型断言,类型兼容性_第5张图片

断言了就没事

5.类型推论,类型断言,类型兼容性_第6张图片

5.类型推论,类型断言,类型兼容性_第7张图片

2.4  断言的另一种写法

类型断言还可以这样写,这样写和用as的效果一样

5.类型推论,类型断言,类型兼容性_第8张图片

2.5  查看DOM元素的类型

5.类型推论,类型断言,类型兼容性_第9张图片

然后你打开这个html文件,你就会在终端中看到打印的东西

在打印的东西的最下面,你就可以看到这个元素的类型

5.类型推论,类型断言,类型兼容性_第10张图片

3  类型兼容性

3.1  类兼容性

我现在有Point_A与Point_B两个类,两个类的内容相同,这个时候我们可以用PointA的规则声明PointB,这个就叫类型兼容性

规则少,实例多,可以兼容

规则多,实例少,不能兼容

5.类型推论,类型断言,类型兼容性_第11张图片

3.2  接口兼容性

3.2.1  接口之间的兼容性

相同的规则可以交叉使用,用 Point_C规则创造出来的p1 可以被 与Point_C相同的Point_D规则 约束 创建出来p2

5.类型推论,类型断言,类型兼容性_第12张图片

规则少,实例多,可以兼容

5.类型推论,类型断言,类型兼容性_第13张图片

规则多,实例少,不能兼容

5.类型推论,类型断言,类型兼容性_第14张图片

3.2.2  接口与类之间的兼容性

可以用 interface 的规则 创建 class 实例

3.3  函数兼容性

函数需要考虑 参数个数 参数类型 返回值变量

3.3.1  参数个数

参数多的规则可以实例参数少的函数

5.类型推论,类型断言,类型兼容性_第15张图片

3.3.2  参数类型

对于一般类型需要参数类型相等,对于复杂类型(比如接口)规则多的可以兼容实例少的(与单独接口兼容性的逻辑是相反的,这里你需要理解为参数个数,参数个数多的可以兼容参数个数少的)

5.类型推论,类型断言,类型兼容性_第16张图片

3.3.3  返回值类型

对于一般类型来讲,返回值类型需要相同。对于复杂类型讲,规则少的可以兼容实例多的(与单独接口兼容性一致)

5.类型推论,类型断言,类型兼容性_第17张图片

你可能感兴趣的:(Typescript笔记,typescript)