TypeScript 泛型与类型体操入门
313 字
2 分钟
TypeScript 泛型与类型体操入门
为什么需要泛型
泛型让函数/类型在不丢失类型信息的前提下复用。没有泛型时只能退回 any,连带丢掉所有类型检查。
function identity<T>(value: T): T { return value}const a = identity<string>('hello') // a: stringconst b = identity(42) // b: number(自动推断)泛型约束
用 extends 限制入参必须包含某些形状:
function pluck<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]}pluck({ name: 'Cyrene', age: 18 }, 'name') // string常用 Utility Types
| 类型 | 作用 |
|---|---|
Partial<T> | 所有属性变可选 |
Required<T> | 所有属性变必填 |
Pick<T, K> | 只取部分属性 |
Omit<T, K> | 排除部分属性 |
Record<K, V> | 构造键值映射类型 |
type User = { id: number; name: string; email: string }type UserPreview = Pick<User, 'id' | 'name'> // { id; name }条件类型与 infer
条件类型像类型的三元表达式,infer 可”提取”内部类型:
type ElementType<T> = T extends (infer U)[] ? U : Ttype A = ElementType<number[]> // numbertype B = ElementType<string> // stringReturnType 就是基于此实现:
type R = ReturnType<() => Date> // Date实战:安全取值
function get<T, K extends keyof T>(obj: T, key: K): T[K] | undefined { return obj[key]}类型体操不是为了炫技,而是把运行时会崩的错提前到编译期。克制使用,读懂胜过写炫。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
TypeScript 泛型与类型体操入门
https://www.devng.cn/posts/typescript-generics/相关文章智能推荐
1
Git 提交规范与 Conventional Commits 实践
研发协作为什么需要提交规范、Conventional Commits 规范详解、如何配合 git hooks 与工具自动校验,以及语义化版本号如何从中推导。
2
Redis 缓存设计:穿透、击穿、雪崩与实战
后端缓存三大经典问题(穿透/击穿/雪崩)的成因与解法,结合布隆过滤器、互斥锁、随机过期时间等策略,附伪代码与 Redis 最佳实践。
3
用 GitHub Actions 搭建轻量 CI/CD 流水线
DevOps从零配置 GitHub Actions,实现代码推送自动 lint、测试、构建与部署,覆盖 workflow 语法、缓存加速、密钥管理与多环境发布。
随机文章随机推荐












