MST

星途 面试题库

面试题:TypeScript 类型保护与类型断言在复杂场景的运用

假设你有一个函数,接收一个参数 `value`,这个 `value` 可能是 `string`、`number` 或 `boolean` 类型。函数需要根据 `value` 的实际类型进行不同的操作:如果是 `string` 类型,返回其长度;如果是 `number` 类型,返回其平方;如果是 `boolean` 类型,返回其相反值。请使用类型保护和类型断言两种方式来实现这个函数,并说明在这种复杂场景下,两种方式的优缺点和适用场景。
33.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

类型保护实现

function operateByTypeWithTypeGuard(value: string | number | boolean): number | boolean {
    if (typeof value ==='string') {
        return value.length;
    } else if (typeof value === 'number') {
        return value * value;
    } else {
        return!value;
    }
}

类型断言实现

function operateByTypeWithTypeAssertion(value: string | number | boolean): number | boolean {
    if ((<string>value).length!== undefined) {
        return (<string>value).length;
    } else if ((<number>value) * (<number>value)!== NaN) {
        return (<number>value) * (<number>value);
    } else {
        return!(<boolean>value);
    }
}

优缺点和适用场景

  • 类型保护
    • 优点:代码逻辑清晰,可读性强,通过 typeof 等操作符明确判断类型,符合自然的类型检查思维。
    • 缺点:需要多个 if - else 分支,对于复杂类型组合可能导致代码冗长。
    • 适用场景:当类型判断逻辑较为简单直接,注重代码可读性和维护性时适用。
  • 类型断言
    • 优点:代码相对简洁,在一些明确知道类型但编译器无法自动推断的情况下,可以直接告诉编译器类型。
    • 缺点:缺乏运行时的类型检查,如果断言错误可能导致运行时错误,降低了代码的健壮性。
    • 适用场景:在明确知道类型且编译器类型推断不准确时,为了简化代码使用。但需谨慎使用,避免引入难以排查的错误。