[TypeScript] Type Challenges #268 - If

76 阅读1分钟

题目描述

实现一个 IF 类型,它接收一个条件类型 C ,一个判断为真时的返回类型 T ,以及一个判断为假时的返回类型 F。 C 只能是 true 或者 false, T 和 F 可以是任意类型。

例如:

type A = If<true'a''b'>  // expected to be 'a'
type B = If<false'a''b'// expected to be 'b'

题解

// ============= Test Cases =============
import type { EqualExpect } from './test-utils'

type cases = [
  Expect<Equal<If<true'a''b'>, 'a'>>,
  Expect<Equal<If<false'a'2>, 2>>,
]

// @ts-expect-error
type error = If<null'a''b'>


// ============= Your Code Here =============
type If<C extends boolean, T, F> = C extends true ? T : F

1、通过C extends boolean来约束传入的类型参数C

2、基于条件判断返回类型,如果Ctrue,返回T,否则返回F