type-challenges:If

33 阅读1分钟

If

问题描述

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

例如:

type A = If<true, 'a', 'b'>  // expected to be 'a'
type B = If<false, 'a', 'b'> // expected to be 'b'
// ============= Test Cases =============
import type { Equal, Expect } 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 boolean & true ? T : F
// type If<C extends boolean, T, F> = C extends  true ? T : F
// type If<C extends boolean, T, F> = C extends  false ? F : T

这道题应该十分简单,判断为 true 时,返回第一个类型参数,判断为假时返回第二个类型参数,这里首先需要约束第一个泛型类型为 boolean 的子类型,其次构建一个三元表达式,判断传入的泛型 C 是继承自 true 类型 还是 false 类型即可。