Now vibe coding, so learning hammer FE ?
《TypeScript类型变量推断机制深度解析》
标签:#TypeScript #类型系统 #类型推断 #泛型
总结:
本文系统拆解了TypeScript函数调用时类型变量推断的完整算法流程,涵盖候选收集与候选解析两大阶段,深入分析了协变/逆变候选列表、优先级机制、联合类型分发、交叉类型处理等核心规则,并提供了
文章要点:
1. 推断分两步走:先收集候选(遍历源类型与目标类型配对,遇到裸类型参数就记录),再解析候选(把列表压缩成单一类型)
2. 候选分协变和逆变两拨:协变候选(输出位置)找公共超类型,逆变候选(输入位置)找公共子类型,通常逆变结果优先
3. 联合类型会分发推断:源类型是联合类型时,会对每个分支独立推断,所有候选进同一个列表
4. 交叉类型有"剥离"玄学:比如
5. 条件类型的条件侧不参与推断:
6. 优先级机制会"覆盖"低优先级:ReturnType、LiteralKeyof等高优先级候选到来时,会清空低优先级列表
7. 最烦人场景有解:当类型参数只出现在extends约束中而不在参数类型里时,可用提取器类型(如
URL:https://norswap.com/typescript-type-variable-inference/
标签:#TypeScript #类型系统 #类型推断 #泛型
总结:
本文系统拆解了TypeScript函数调用时类型变量推断的完整算法流程,涵盖候选收集与候选解析两大阶段,深入分析了协变/逆变候选列表、优先级机制、联合类型分发、交叉类型处理等核心规则,并提供了
NoInfer<T>控制推断、提取器类型解决"最烦人场景"等实用技巧,帮助开发者理解并调试那些"看似疯狂"的类型推断行为。文章要点:
1. 推断分两步走:先收集候选(遍历源类型与目标类型配对,遇到裸类型参数就记录),再解析候选(把列表压缩成单一类型)
2. 候选分协变和逆变两拨:协变候选(输出位置)找公共超类型,逆变候选(输入位置)找公共子类型,通常逆变结果优先
3. 联合类型会分发推断:源类型是联合类型时,会对每个分支独立推断,所有候选进同一个列表
4. 交叉类型有"剥离"玄学:比如
A & {x: number}可能让A捕获整个对象,而A & "a"可能只剥离出品牌属性,这是TS的启发式策略5. 条件类型的条件侧不参与推断:
T extends Foo不会把Foo作为T的候选,infer引入的新变量才会被收集6. 优先级机制会"覆盖"低优先级:ReturnType、LiteralKeyof等高优先级候选到来时,会清空低优先级列表
7. 最烦人场景有解:当类型参数只出现在extends约束中而不在参数类型里时,可用提取器类型(如
GetV<T>)或交叉参数类型(T & Map<K,V>)来辅助推断,但两者在联合类型支持上有取舍URL:https://norswap.com/typescript-type-variable-inference/
TypeScript 泛型趣味实践
标签:#TypeScript #泛型 #函数重载 #TanStack #条件类型
文章深入探讨了如何利用 TypeScript 泛型、条件类型和函数重载,为 TanStack Start 的 Server Function 构建一个完全类型安全的查询选项封装函数。通过一个真实的场景——确保带参数和不带参数的 Server Function 都能被正确推断返回类型和参数类型——展示了从基础泛型约束到复杂类型体操的完整实现路径,最终解决了可选参数与类型推断的冲突问题。
文章要点:
- 通过为 TanStack Start 的 Server Function 封装
- 初始方案使用泛型约束
- 利用条件类型
- 通过 TypeScript 函数重载(Overloading)定义两个签名:一个用于带参数的 Server Function,一个用于无参函数,从而精确控制参数的可选性
- 展示了泛型、条件类型与函数重载结合使用的高级技巧,实现编译时严格的类型检查和完美的类型推断
链接:https://frontendmasters.com/blog/fun-with-typescript-generics/
标签:#TypeScript #泛型 #函数重载 #TanStack #条件类型
文章深入探讨了如何利用 TypeScript 泛型、条件类型和函数重载,为 TanStack Start 的 Server Function 构建一个完全类型安全的查询选项封装函数。通过一个真实的场景——确保带参数和不带参数的 Server Function 都能被正确推断返回类型和参数类型——展示了从基础泛型约束到复杂类型体操的完整实现路径,最终解决了可选参数与类型推断的冲突问题。
文章要点:
- 通过为 TanStack Start 的 Server Function 封装
refetchedQueryOptions 工具函数,解决查询数据返回类型为 any 的类型安全问题- 初始方案使用泛型约束
<T extends (arg: { data: any }) => Promise<any>> 提取参数和返回类型,但无法处理无参函数的可选参数场景- 利用条件类型
infer 关键字创建类型工具 ServerFnArgs 来提取函数参数类型,并判断函数是否有参数- 通过 TypeScript 函数重载(Overloading)定义两个签名:一个用于带参数的 Server Function,一个用于无参函数,从而精确控制参数的可选性
- 展示了泛型、条件类型与函数重载结合使用的高级技巧,实现编译时严格的类型检查和完美的类型推断
链接:https://frontendmasters.com/blog/fun-with-typescript-generics/