MST

星途 面试题库

面试题:TypeScript中boolean类型在泛型和条件类型下的深度应用

编写一个TypeScript泛型函数`toggle`,它接受两个类型参数`T`和`U`,以及一个`boolean`类型的标志`flag`。当`flag`为`true`时,函数返回类型为`T`;当`flag`为`false`时,函数返回类型为`U`。同时,要确保函数返回值的类型能根据`flag`的实际值在类型层面上正确推导。请详细说明在这个实现中,如何利用条件类型与`boolean`类型来达到泛型返回类型的动态切换,以及这种实现对代码类型安全性和灵活性的影响。
31.9万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function toggle<T, U>(flag: boolean, value1: T, value2: U): T extends U ? T : U {
    return flag ? value1 : value2;
}

条件类型与boolean类型的利用

  1. 条件类型:在上述代码中,使用了条件类型 T extends U ? T : U。条件类型是TypeScript中一种强大的类型操作符,它允许根据某个条件在不同类型之间进行选择。在这里,条件T extends U检查类型T是否是类型U的子类型。如果是,返回T类型;否则,返回U类型。
  2. 结合boolean类型:函数toggle通过boolean类型的参数flag来决定返回值。在函数体中,通过三元表达式flag ? value1 : value2,当flagtrue时返回value1(类型为T),当flagfalse时返回value2(类型为U)。在类型层面上,条件类型T extends U ? T : U确保了返回值类型与实际返回值的一致性。

对代码类型安全性和灵活性的影响

  1. 类型安全性
    • 编译时检查:这种实现利用TypeScript的类型系统,在编译时就能发现类型不匹配的错误。例如,如果调用toggle函数时传入的value1value2类型与TU不匹配,TypeScript编译器会报错,从而避免运行时错误。
    • 正确的类型推导:通过条件类型和boolean类型的结合,返回值的类型能根据flag的实际值在类型层面上正确推导。这意味着调用者可以放心地使用返回值,因为类型是确定且安全的。
  2. 灵活性
    • 泛型参数:使用泛型参数TU,使得函数可以接受任意类型的参数value1value2。这大大提高了函数的通用性,可以在不同类型的场景下复用,而不需要为每种类型组合都编写一个单独的函数。
    • 动态类型切换:根据flag动态切换返回类型,使得函数在不同条件下能够返回不同类型的值,满足了更多复杂业务逻辑的需求,增强了代码的灵活性。