TypeScript 的类型断言

简介

类型断言有两种形式,一种是“尖括号”语法:

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

两种形式是等价的,但是,当在 TypeScript 里使用 JSX 时,只有 as 语法断言是被允许的

应用场景

有时候,需要在还不确定类型的时候就访问其中一个类型的属性或方法,比如:

function getLength(something: string | number): number {
  if (something.length) {
    return something.length
  } else {
    return something.toString().length
  }
}

// 报错

可以看到,上面的代码会报错,此时可以使用类型断言,将 something 断言成 string

function getLength(something: string | number): number {
  if ((something as string).length) {
    return (something as string).length
  } else {
    return something.toString().length
  }
}

类型断言不是类型转换,断言成一个联合类型中不存在的类型是不允许的:

function toBoolean(something: string | number): boolean {
  return <boolean>something
}

// 报错
除特殊说明外本人博客均属原创,转载请注明出处:http://blog.johnhan.cn/blog_1052.html
京ICP备19044523号-1