标签: 类型系统

15 个内容

笔记(15)

本文详细介绍了编程中泛型类型参数的逆变与协变概念。协变允许子类型容器向上转型为父类型容器(返回值场景),逆变允许父类型容器向下转型为子类型容器(参数场景)。文章对比了协变、逆变与不变,并解释了引入逆变与协变以兼顾灵活性和类型安全的原因。

Elliot Yang·
130 浏览

本文深入探讨了 TypeScript 类型系统的设计哲学与实践智慧,包括类型操作符进阶应用(`infer`、`keyof`、映射类型、`never`),声明空间的工程化实践,类型兼容性的协变与逆变,以及类型编程的最新进展和编译性能优化策略。同时,还讨论了类型安全的 API 响应处理和高级模式匹配实践,以及类型系统边界的探索。

Elliot Yang·
165 浏览

JavaScript 类型系统区分值类型和引用类型,影响内存存储和操作。通过 `typeof` 和 `instanceof` 进行类型判断,需注意其局限性。V8引擎使用隐藏类和指针标记优化类型处理。理解类型底层机制、内存管理及关注新提案,能编写更高效的 JavaScript 代码。

Elliot Yang·
93 浏览

本文深入解析 TypeScript 数组类型约束,涵盖非空数组、元素非空校验的实现,并探讨了递归类型映射、联合类型处理等高级机制。强调编译时类型与运行时校验协同,以及性能优化策略。最后给出工程实践、问题解决及最佳实践指南。

Elliot Yang·
106 浏览

TypeScript 4.9的`satisfies`操作符在确保类型安全的同时,保留了变量的原始类型推断,解决了类型验证与保留的矛盾。它适用于精确属性控制、动态键值约束等场景,优于类型断言。解决递归类型错误需分析根本原因,谨慎使用`skipLibCheck`。

Elliot Yang·
115 浏览

本文深入解析了 TypeScript 类型系统,对比 interface 与 type 的差异和应用场景,强调类型注解的工程价值,并探讨类型谓词、泛型约束、条件类型等进阶实践。同时,分析了编译性能优化策略和未来演进方向。

Elliot Yang·
95 浏览

TypeScript 4.9 引入 `satisfies` 运算符,旨在解决类型注解和类型推断的矛盾,保留字面量类型信息。它通过验证类型是否满足目标类型,同时保留最具体的推断类型,强化运行时安全,适用于配置对象验证和联合类型精确推断等场景。应权衡使用,避免过度增加编译耗时。

Elliot Yang·
95 浏览

本文总结了在 React 项目中使用 TypeScript 的实用技巧。包括:获取枚举键值类型、传递 JSX 或组件作为 Props、使用 `satisfies` 运算符、灵活运用模板字面量类型、定义 `useParams` 类型、类型缩小方法以及 `Array<T>` 与 `T[]` 的选择。这些技巧有助于提升代码质量、安全性和可维护性。

Elliot Yang·
102 浏览

TypeScript 中 `never` 类型表示永不存在的值,常见于抛出异常或无限循环函数。它可用于排除不需要的类型,如 `NonNullable`。`never` 还可用于 `switch` 或 `if` 语句中,通过类型检查避免遗漏条件分支,确保代码的完备性。

Elliot Yang·
87 浏览

本文介绍了 TypeScript 中 `satisfies` 运算符的实用技巧。`satisfies` 允许在不丢失类型推断的情况下为值添加类型注解,特别适用于强类型化函数。文章通过 `URLSearchParams` 的例子,展示了如何使用 `satisfies` 实现更强的类型检查,避免因类型宽松导致的潜在错误。

Elliot Yang·
112 浏览

本文针对TypeScript性能优化提出建议。问题:类型推导在大项目中变慢,影响开发效率。方案:优先使用interface定义类型,利用其冲突检测特性;添加类型注解,特别是返回类型,减少编译器工作量,提升编译速度。

Elliot Yang·
91 浏览

Prisma 在大型 schema 下生成过大的 `index.d.ts` 文件,导致编辑器自动补全和类型检查缓慢。社区提出了表分区 (Table Partitioning) 方案,但尚未解决。问题与 GitHub Issue #4807 和 #1708 相关。

Elliot Yang·
150 浏览

本文总结了 TypeScript 4.9 的新特性`satisfies`操作符,该操作符允许在不改变表达式类型推断的情况下,验证表达式是否匹配特定类型,解决了类型校验和类型信息丢失的矛盾。同时提及了布尔逻辑运算符和解决`TS2310`错误的方法。

Elliot Yang·
169 浏览

本文介绍了 JavaScript 中值类型(基本类型)和引用类型的区别。值类型存储在栈中,复制的是值本身;引用类型存储在堆中,复制的是指针。文章还讨论了使用 `typeof` 和 `instanceof` 检测类型的方法,以及内存空间分配、声明提升和严格模式等相关概念。

Elliot Yang·
110 浏览

本文总结了 TypeScript 的实用特性,包括:利用 `infer` 关键字在条件类型中推断类型;`never` 类型表示不可观测的值;`keyof + in` 用于创建类型转换。同时,针对 pnpm 安装后类型提示缺失的问题,提出在 `d.ts` 文件中使用三斜线指令 `/// <reference types="..." />` 解决。最后解释了函数返回非 void 类型可以赋值给返回 void 类型的原因,强调 void 函数的关键在于返回值被忽略。

Elliot Yang·
145 浏览