70. TypeScript中的类型(上)
JS中有哪些数据类型
null, undefined
string,number, boolean
bigint, symbol
object(含Array, Function,Date)
TS中有哪些数据类型
以上JS中的所有,外加
void, never, enum, unknown, any
再加上自定义类型type,interface
如何理解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中的Number, String,Boolean只用于包装对象,正常开发者不用它们,在TS里也不用
大写的Object也不要用,因为表示的范围太大了。所以我们在TS里一般不用Object
如何在TS里描述对象的数据类型?
用class/constructor描述
用type或interface描述

思考题: 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