70. TypeScript中的类型(上)

JS中有哪些数据类型

null, undefined

string,number, boolean

bigint, symbol

object(含Array, Function,Date)

TS中有哪些数据类型

以上JS中的所有,外加

void, never, enum, unknown, any

再加上自定义类型typeinterface

如何理解TS的数据类型

type number:所有数字的集合,包括整数,小数

type string:

type boolean: true | false(这里的|是和而不是或)

type Object:{?} | Array | Function | String | Number | Boolean | RegExp |......

为什么会有两个number,string,boolean

number vs Number

区别就是number是用二进制的方式表示数字,new Number(42)是用对象创建数字,其中还包括原型。Number很少用,只有在使用某些函数的时候才会用。

JS中的NumberStringBoolean只用于包装对象,正常开发者不用它们,在TS里也不用

大写的Object也不要用,因为表示的范围太大了。所以我们在TS里一般不用Object

如何在TS里描述对象的数据类型?

  1. 用class/constructor描述

  2. 用type或interface描述

截屏2023-05-30 下午11.52.51

思考题: key的类型可以不是string吗?

答案: 可以,可以换成number, symbol

结论:由于object太不精确,所以TS开发者一般使用索引签名Record范型来描述普通对象。

数组对象该怎么描述?

结论:由于Array太不精确,所以TS开发一般用Array<?>或string[ ], 或者[string, number]来描述数组。

思考题:

答案是[1, 2, 3]

函数对象该怎么描述?

⚠️注意,写type的时候可以用 =>, 但是写interface的时候不可以。

这里没有写参数,为什么可以通过?

答:因为类型兼容。

或者也可以写成

为什么这里不用写type?

答:类型推导

也可以这样写

上面这个也对,但是多余

上面这个少传一个参数,但是也可以通过。

箭头函数的缺点: 不支持this

方方老师关于this的文章:https://zhuanlan.zhihu.com/p/23804247

结论:

由于Function太不精确,所以TS开发者一般用( )=>?来描述函数

其他对象一般直接用class描述

any, unknown,never是什么?

Last updated