为了便于记忆和理解ts中操作符,在这里记录下常用操作符和用途。
1. 可选参数运算符(?:)
?:用来表示参数可有可无,例如:
// 在属性名后面加上一个问号,表示属性可选
const obj: {num?: number, str: string} = {str: '123'}
// 函数形参后加问号表示调用时该参数可传可不传
function func(data?: object) {
...
}
2. 可选链运算符 (?.)
当访问一个可能不存在的对象内的属性时,会报错。
可以使用(?.)表示父级对象可能不存在
const num = obj.num?.a
// 枚举key访问
const num = obj['num']?.a
3. 空值合并运算符(??)
类似于js当中‘||’,可以用于短路语法,不同的是只有当??左侧的值为null或者undefined时才会将右侧的值赋给等号左侧的变量。
const obj: {
str?: string
} = { str: '' }
const a = obj.str ?? 123
console.log(a); // 打印字符串''
/*******分割线***********/
const obj: {
str?: string
} = {}
const a = obj.str ?? 123
console.log(a); // 打印数字123
4. 非空断言(!)
我们无法将一个类型中包含null或undefined的变量赋值给其他类型的变量,可以在赋值时在变量名后加!,排除undefined和null类型
const a:undefined | null | string | number = '123'
let y: number | string = a!
需要注意: 如果后面还需要调用a身上的方法,例如:toString(),ts不会提示,当a为undefined或null时,程序报错:Cannot read properties of undefined (reading ‘toString’)
5. 联合类型(|)
定义一个变量时,它的值可能不是只有一种类型,可以使用管道符(|)将多种类型联合。
const multipleTypes: string | number | boolean | [] | {} = '123'
6. 类型断言
当我们需要讲一个联合类型的数据赋值给一个单一类型或另一联合类型的变量,并已经确定该数据符合符合该变量的类型定义时,我们可以使用类型断言将它断言为我们需要的类型
const a: {
s?: string | number
} = {}
// <Type>语法
const b: number = <number>a.s
// as 语法
const b: string = a as string
注意: 类型断言会影响ts的类型判断,在不可预测类型的变化时,要小心使用。
下章学习ts类型定义-type和interface