高阶泛型:将类型参数作为类型函数的输入
探索如何将泛型本身作为参数传递,实现类型层面的高阶函数,增强类型系统的抽象能力。 · 难度:入门 · +10XP
高阶泛型:将类型参数作为类型函数的输入
TypeScript 的类型系统是图灵完备的,高阶泛型允许我们将类型构造器(即泛型本身)作为参数传递给另一个泛型。本教程将展示如何实现类型层面的 map、filter 等操作,例如对元组中的每个类型应用一个转换。你将学习如何定义类型层面的 HOF(Higher-Order Type),并理解何时使用 extends 约束来保证类型安全。掌握这一模式后,你可以创建类型安全的函数装饰器、状态管理类型工具,甚至模拟函数式编程中的类型类。
type MapTuple<T extends any[], F extends (item: any) => any> = {
[K in keyof T]: T[K] extends infer Item ? F extends (item: Item) => infer R ? R : never : never
}
type ToNumber<T> = T extends string ? number : T
type Result = MapTuple<[string, boolean, number], typeof ToNumber> // [number, boolean, number]