MST

星途 面试题库

面试题:TypeScript联合类型在条件类型与泛型结合的深度应用

实现一个TypeScript泛型工具类型`ConditionalProcess<T>`,`T`是一个联合类型。当`T`中的类型是字符串时,将其转换为全大写形式;当`T`中的类型是数字时,将其乘以2;当`T`中的类型是布尔值时,取其相反值。例如,`ConditionalProcess<string | number | boolean>`应该得到`string大写形式 | number * 2 | boolean取反`的联合类型。同时,编写一个对应的函数`applyConditionalProcess`,它接受一个符合`T`联合类型的值,返回经过处理后对应类型的值。
48.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
type ConditionalProcess<T> = T extends string
  ? Uppercase<T>
    : T extends number
      ? T extends 0 ? 0 : T extends 1 ? 2 : T extends 2 ? 4 : T extends 3 ? 6 : T extends 4 ? 8 : T extends 5 ? 10 : T extends 6 ? 12 : T extends 7 ? 14 : T extends 8 ? 16 : T extends 9 ? 18 : never
      : T extends boolean
        ? boolean extends T ? boolean : T extends true ? false : true
        : never;

function applyConditionalProcess<T>(value: T): ConditionalProcess<T> {
  if (typeof value ==='string') {
    return value.toUpperCase() as ConditionalProcess<T>;
  } else if (typeof value === 'number') {
    return (value * 2) as ConditionalProcess<T>;
  } else if (typeof value === 'boolean') {
    return (!value) as ConditionalProcess<T>;
  }
  throw new Error('Unsupported type');
}