Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.md

0268 If

关键词: TypeScript, TypeChallenge

实现一个工具类If, 它接受三个泛型参数:

  • 条件C, condition, 应该是true或者false中的一个
  • 条件为真的返回类型T, 可以为任意类型
  • 条件为假的返回类型F, 可以为任意类型

举个栗子:

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

答案

type If<C extends boolean, T, F> = C extends true ? T : F;

分析

首先限制 C 为 true, false 之一, 即为 boolean 类型

如果C为 true, 则C是true的子集, 则C extends true成立, 返回T, 反之返回F

伪码如下

function If(C, T, F) {
  if(C is not subset of boolean) throw new Error()

  if(C is subset of true) return T
  else return F
}