📜  TypeScript类型断言(1)

📅  最后修改于: 2023-12-03 15:05:40.087000             🧑  作者: Mango

TypeScript类型断言

在 TypeScript 中,类型断言可以用来手动指定一个值的类型。

为什么需要类型断言?

在 TypeScript 中,有时候编译器无法确定一个变量的类型或者我们需要将一个类型转换成另一个类型,这时候就需要使用类型断言。

语法

TypeScript 提供了两种类型断言的方式:

尖括号语法
let someValue: any = "hello world";
let strLength: number = (<string>someValue).length;
as 语法
let someValue: any = "hello world";
let strLength: number = (someValue as string).length;
使用场景
将一个更加通用的类型转换成一个更加具体的类型
function getLength(str: string | string[]): number {
    if((<string>str).length) {
        return (<string>str).length; // 转换成string类型,可以使用length属性
    } else {
        return (<string[]>str).length; // 转换成string数组类型,可以使用length属性
    }
}
将一个类型断言成联合类型中不存在的类型
interface Cat {
    name: string;
    run(): void;
}

interface Fish {
    name: string;
    swim(): void;
}

function generatePet(): Cat | Fish {
    //...
}

let pet = generatePet();
if((<Fish>pet).swim) { //将pet断言成Fish类型,可以调用swim方法
    (<Fish>pet).swim();
} else {
    (<Cat>pet).run();
}
注意事项

在进行类型断言时,一定要确保该变量的值确实符合我们断言的类型,否则会在运行时报错。为了避免这种情况,可以在进行类型断言之前使用 typeof 或者 instanceof 进行类型检查。

function getLength(str: string | string[]): number {
    if(typeof str === 'string') {
        return str.length;
    } else {
        return str.join(',').length;
    }
}