Skip to content

类型断言

类型断言:让 TypeScript 按照我们的方式做类型检查

ts
const arrayNumber: number[] = [1, 2, 3, 4]
const greaterThan2: number = arrayNumber.find((num) => num > 2) // ts(2322) 不能把类型 undefined 分配给类型 number

错误原因:在 TypeScript 看来,greaterThan2 可能是 number,也可能是 undefined。

解决:通过类型断言,让函数返回值为 number 类型

ts
const greaterThan2: number = arrayNumber.find((num) => num > 2) as number

语法

ts
// 尖括号 语法
let someValue: any = 'this is a string'
let strLength: number = (<string>someValue).length

// as 语法
let someValue: any = 'this is a string'
let strLength: number = (someValue as string).length

括号格式会与 react 中 JSX 产生语法冲突,推荐 as 语法

非空断言

! :用于断言操作对象是 非 null 和非 undefined 类型。

x!:变量 x 排除 undefined 和 null 类型

ts
let mayNullOrUndefinedOrString: null | undefined | string
mayNullOrUndefinedOrString!.toString() // ok
mayNullOrUndefinedOrString.toString() // ts(2531)

确定赋值断言

! :在实例属性或属性声明后

let x!:变量 x 一定会被赋值

ts
let x: number
// let x!: number;
initialize()

// Variable 'x' is used before being assigned.(2454)
console.log(2 * x) // Error
function initialize() {
  x = 10
}