TS中的类型
TS 中的类型有number、string、boolean、字面量、any、unknown、void、never、object、array、tuple、enum
# any 和 unknown
这两个类型的变量都可以被赋值任意值,但是any类型的变量可以再赋值给其他类型变量(失去类型检查),而unknown类型的变量不允许赋值给其他类型的变量(需要类型断言)
let x: any
x = 1
x = '2'
x = true
let y: unknown
y = 1
y = '2'
y = true
let s: string
s = x //不会报错
s = y //会报错
// 使用断言,断言有以下两种方式
s = y as string
s = <string>y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
在代码编写过程中,尽量使用 unknown 类型,避免使用 any 类型,因为 any 会影响其他类型的变量的类型检测,同时也失去了使用 ts 的意义。
# void 空值
void 用在变量上的情况不多,主要用来设置函数返回值
void 表示没有返回值,此时函数返回除了 undefined 或 null 以外的其他值都会报错
# never 没有值
never 表示没有返回值,连空值都没有。
在 js 中有一些函数就是没有返回值的,连 undefined 都不会返回,他们是用来报错的
function fn(): never {
throw new Error('报错了')
}
1
2
3
2
3
# object 表示一个 js 对象
不太实用,因为 js 中一切都是对象,object 类型就等于说是没有限制
在开发中,我们要限制对象,往往是想要限制对象内部的属性的类型
const b: {
name: string
age?: number
}
1
2
3
4
2
3
4
这里的 age 是可选的属性,当给 b 变量赋值的时候,可以有 age,也可以没有。
当只要求 b 对象里面有 number 属性,不限制是否有其他属性时就不能采用以上的可选属性,可以如下处理:
interface TreeNode {
[propName: string]: any
prop: TreeNode[]
}
function test(node: TreeNode, prop: string) {
if (!node) return
let myNode: TreeNode[] | TreeNode
myNode = node
while (!Array.isArray(myNode) && myNode[prop]) {
if (Array.isArray(myNode[prop])) {
myNode = myNode[prop][0]
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 函数结构的类型声明
语法:(形参:类型, 形参:类型, ...) => 返回值类型
# array 数组
const f = number[]
const g = Array
上次更新: 2023/12/16, 09:22:46