Skip to content

Medium 精选

medium 共 103 题,是真正的主战场。这里精选 8 道,覆盖全部六个套路。

TIP

medium 里 80% 的题都是六大套路的组合。做题前先判断属于哪一类。

Medium2 · Get Return Type查看答案

实现 MyReturnType<T>,不用内置的 ReturnType

ts
type A = MyReturnType<() => string> // string
Medium3 · 实现 Omit查看答案

实现 MyOmit<T, K>,剔除指定的键。

ts
interface Todo {
  title: string
  description: string
  completed: boolean
}
type A = MyOmit<Todo, 'description' | 'completed'>
// { title: string }
Medium9 · Deep Readonly查看答案

递归地把所有属性(含嵌套)变成只读。

ts
type A = DeepReadonly<{ a: { b: string } }>
// { readonly a: { readonly b: string } }
Medium10 · Tuple to Union查看答案

把元组转成元素类型的联合。

ts
type A = TupleToUnion<[string, number]> // string | number
Medium119 · ReplaceAll查看答案

实现 ReplaceAll<S, From, To>,替换字符串里所有匹配。

ts
type A = ReplaceAll<'a-b-c', '-', '/'> // 'a/b/c'
Medium实现 UnionToIntersection查看答案

把联合类型转成交叉类型。

ts
type A = UnionToIntersection<{ a: 1 } | { b: 2 }>
// { a: 1 } & { b: 2 }
Medium实现 Getters(键重映射)查看答案

把对象的每个属性转成对应的 getter 方法。

ts
type A = Getters<{ name: string; age: number }>
// { getName: () => string; getAge: () => number }
Medium实现 TrimLeft查看答案

去掉字符串左侧的空白字符(空格、换行、制表符)。

ts
type A = TrimLeft<'  \n\t hello'> // 'hello'

刷完这些之后

去检验一下成果:打开 type-fest 的任意源码文件,看能不能读懂。能读懂就达到 L2 目标了。

基于 VitePress 与 Twoslash 构建