作为JavaScript的超集,ts带来了不一样的开发体验,代码审读越来越容易了,bug也减少了,一起回顾基本篇吧。
TypeScript 的类型
1. number
数字类型,包含小数、还有其他进制的数
let num: number = 6
let big: number = 100n
2. string
let color: string = 'red'
3. boolean
let flag: boolean = true
4. Array
在ts中,Array 一般指所有元素类型相同的值的集合
let arr: Array<number> = [1,2,3,4]
5. 函数
const func = (id: number, sex = 'male') => {
return {
id, sex
}
}
- 这里函数的第二个参数是可选值,且有默认值
- 类型推断,所以这里不需要加返回值类型
6. any
any表示这个值可以为任意类型,被定义为any就意味着不做任何类型检查,因此在实际项目上非不必要尽量要减少使用。
7. void
常被用做函数的返回值,表示该函数没有返回值,或者返回undefined(函数不返回值 === 返回undefined)
8. object
除了基本类型number, bigint, string, boolean, symbol, null, undefined,其他都是object
9. tuple
tuple 是 数量固定,类型可以各异 版的数组
const [state, setState] = useState('initialState')
这里面[state, setState] 就可以理解为tuple。类似地,在Promise.all([...]),这个返回值也可以理解为tuple。如果在使用中遇到一些ts报错,尝试使用后面加上as const。
10. enum
枚举类型,在项目中常用于定义某种场景下的几个值,方便统一使用、统一修改。
11. null & undefined
null、undefined在ts中既表示一个值也表示一种类型
12. unknown
unknown 表示这个值可以是任意值,属于“严格”版的any
13. never
下面这个例子的函数返回值就是never,可以通过类型推断中看出。
const func = () => {
throw new Error()
}
interface & typeof
interface 不是类型,是接口,它可以让我们创建符合实际场景的的类型。
typeof,别名。
什么时候需要声明类型
一般来说,我们在声明任何变量的时候都应该声明类型,比如:普通变量、函数、组件、hook等,声明参数或者返回值类型,但是由于ts类型推断,有些时候我们不需要声明。
.d.ts
JS文件 + .d.ts文件 = TS文件
.d.ts文件可以让 js文件 维持js的身份,而拥有ts的类型保护,点击类型可以跳转到.d.ts文件。