news 2026/5/8 16:18:07

TypeScript 高级技巧:我常用的 8 个类型体操

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TypeScript 高级技巧:我常用的 8 个类型体操

TypeScript 高级技巧:我常用的 8 个类型体操

大家好,我是蔓蔓。TypeScript 写得多了,自然会积累一些高级用法。今天整理了几个我日常开发中经常用到的类型体操技巧,希望能帮到大家。

1. Partial 的深层版本

type DeepPartial<T> = { [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]; }; interface User { name: string; address: { city: string; street: string; }; } type PartialUser = DeepPartial<User>; // { name?: string; address?: { city?: string; street?: string } }

2. 函数参数提取

type Parameters<T> = T extends (...args: infer P) => any ? P : never; function greet(name: string, age: number): string { return `Hello ${name}, you are ${age}`; } type GreetParams = Parameters<typeof greet>; // [string, number]

3. 条件类型与 infer

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any; type GreetReturn = ReturnType<typeof greet>; // string

4. Omit 和 Pick 的组合使用

interface Post { id: number; title: string; content: string; createdAt: Date; } type PostPreview = Pick<Post, 'title' | 'id'>; type PostWithoutDate = Omit<Post, 'createdAt'>;

5. 模板字面量类型

type EventName<T extends string> = `${T}Changed`; type ClickEvent = EventName<'click'>; // 'clickChanged' type FocusEvent = EventName<'focus'>; // 'focusChanged'

6. 类型守卫

interface Bird { fly(): void; layEggs(): void; } interface Fish { swim(): void; layEggs(): void; } function isFish(pet: Fish | Bird): pet is Fish { return (pet as Fish).swim !== undefined; }

7. 索引类型查询

interface User { id: number; name: string; email: string; } type UserKeys = keyof User; // 'id' | 'name' | 'email' type UserValues = User[keyof User]; // number | string

8. 映射类型

type Readonly<T> = { readonly [P in keyof T]: T[P]; }; type Writable<T> = { -readonly [P in keyof T]: T[P]; }; type Nullable<T> = { [P in keyof T]: T[P] | null; };

类型体操虽然有趣,但不要过度使用。团队协作中,可读性永远是第一位的。你有什么常用的 TypeScript 技巧吗?欢迎分享~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 16:16:59

5分钟让Figma说中文:设计师必备的终极汉化解决方案

5分钟让Figma说中文&#xff1a;设计师必备的终极汉化解决方案 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 你是否曾经面对Figma的全英文界面感到无从下手&#xff1f;作为设计师&am…

作者头像 李华
网站建设 2026/5/8 16:16:39

如何高效使用de4dot:开源.NET反混淆工具的完整实践指南

如何高效使用de4dot&#xff1a;开源.NET反混淆工具的完整实践指南 【免费下载链接】de4dot .NET deobfuscator and unpacker. 项目地址: https://gitcode.com/gh_mirrors/de/de4dot de4dot是一款功能强大的开源.NET反混淆与解包工具&#xff0c;采用C#编写并遵循GPLv3开…

作者头像 李华
网站建设 2026/5/8 16:16:38

PvZ Tools:植物大战僵尸终极辅助工具完整指南

PvZ Tools&#xff1a;植物大战僵尸终极辅助工具完整指南 【免费下载链接】pvztools 植物大战僵尸原版 1.0.0.1051 修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztools 作为一款专为《植物大战僵尸》经典PC版1.0.0.1051打造的专业级辅助工具&#xff0c;PvZ …

作者头像 李华
网站建设 2026/5/8 16:16:05

警惕!AI智能体成企业新“成本黑洞”:隐性成本防坑指南

很多老板谈起“上智能体”&#xff0c;第一反应是&#xff1a;现在大模型调用很便宜&#xff0c;平台也说“低代码、几天上线”&#xff0c;怎么可能是成本黑洞&#xff1f;问题就在这里——显性费用确实越来越低&#xff0c;但隐性消耗&#xff0c;正在悄悄吞掉预算、拖慢团队…

作者头像 李华