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备17018604号-1  鄂公网安备42060702000030号