MST

星途 面试题库

面试题:TypeScript枚举类型在联合类型与类型守卫中的运用

已知有一个枚举类型定义如下:enum Direction {North = 'N', South = 'S', East = 'E', West = 'W'}; 现在有一个函数,接收一个字符串类型的参数,要求在函数内部通过类型守卫判断该字符串是否为枚举Direction中的某个值,如果是,则返回对应的枚举成员,否则返回null。请实现这个函数,并解释在这个过程中联合类型与类型守卫是如何协同工作的。
44.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
enum Direction {
    North = 'N',
    South = 'S',
    East = 'E',
    West = 'W'
}

function getDirection(str: string): Direction | null {
    if (str === 'N' || str === 'S' || str === 'E' || str === 'W') {
        return str as Direction;
    }
    return null;
}

联合类型与类型守卫的协同工作解释

  1. 联合类型:在函数getDirection的返回类型Direction | null中,|表示联合类型。它表明函数的返回值要么是Direction枚举类型中的某一个值,要么是null。这让函数的返回值可以有多种可能类型。
  2. 类型守卫:在函数内部,通过if (str === 'N' || str === 'S' || str === 'E' || str === 'W')语句进行判断,这就是类型守卫。它基于传入的str值,在运行时检查str是否匹配枚举Direction中的值。如果匹配,通过类型断言str as Directionstr转换为Direction类型返回;如果不匹配则返回null。类型守卫在运行时缩小了str的类型范围,使得我们可以在特定分支下安全地将str当作Direction类型处理,从而实现联合类型中不同类型的区分处理。