首页 > 编程笔记 > JavaScript笔记 阅读:6

TypeScript中的类型断言(附带实例)

TypeScript 通过类型断言这种方式告诉编译器“相信我,我知道自己在干什么”。

类型断言好比其他程序语言里的类型转换,但与类型转换不同的是,类型断言不进行特殊的数据检查。它在运行时不对代码产生影响,只在编译阶段起作用,因为 TypeScript 会假设程序员对代码已经进行了类型检查。

类型断言有两种语法形式,分别是“尖括号”语法和 as 语法。

假如我们想要获取一个联合类型“number|string”变量的长度。虽然 string 类型的变量有 length 属性,number 类型的变量没有 length 属性,但我们可以直接通过条件判断确认 x.length 是否可取,代码如下:
/* 需求:定义一个函数得到一个string或number联合类型变量的长度 */
// 错误实现
function getLength(x: number | string) {
    // return x.length  // error, number 类型的变量没有 length 属性
    if (x.length) {      // error, number 类型的变量没有 length 属性
        return x.length;
    } else {
        return x.toString().length;
    }
}

为了让 TypeScript 认识到“相信我,我知道自己在干什么”,可以尝试对变量进行类型断言。

比如“<string>x”的断言声明已经明确当变量 x 是 string 类型时,就进行条件判断,并且可以利用“(x as string)”将变量 x 进行 string 类型的强制转换,最终得到 length 属性。如果变量 x 是 number 类型,则可以直接利用 number 类型的变量拥有的 toString 方法先将其转化成字符串,再得到其 length 属性,代码如下:
// 正确实现:类型断言
function getLength(x: number | string) {
    if (<string>x).length) {
        return (x as string).length;
    } else {
        return x.toString().length;
    }
}

console.log(getLength('zhangsan'), getLength(2015));

相关文章