0

0

JavaScript类型系统_TypeScript进阶类型编程指南

狼影

狼影

发布时间:2025-11-25 11:32:02

|

758人浏览过

|

来源于php中文网

原创

交叉类型合并多个类型,联合类型支持多态输入,条件类型实现类型逻辑判断,映射类型转换属性,infer推断类型,递归与模板字面量增强表达力,共同构建TypeScript高阶类型系统。

javascript类型系统_typescript进阶类型编程指南

JavaScript 的类型系统在原始设计中是动态且灵活的,这带来了编码的自由度,也增加了运行时出错的风险。TypeScript 通过静态类型检查扩展了 JavaScript,在大型项目中显著提升了代码的可维护性与开发效率。而掌握 TypeScript 的进阶类型编程,是构建高复用、强类型应用的关键。

交叉类型与联合类型

交叉类型(Intersection Types)允许你将多个类型合并为一个,常用于混入(mixin)模式或组合对象结构。

例如:

type A = { name: string };
type B = { age: number };
type Person = A & B;
const person: Person = { name: 'Alice', age: 25 };

这里 Person 类型同时具备 nameage 属性。

立即学习Java免费学习笔记(深入)”;

联合类型(Union Types)表示一个值可以是多种类型之一,适合处理不确定输入的场景。

比如:

function printId(id: string | number) {
  console.log('ID:', id);
}

使用联合类型时,TypeScript 要求你在操作前进行类型缩小(narrowing),如通过 typeof 判断。

条件类型与分布式条件

条件类型让你根据类型关系动态选择类型,语法为 T extends U ? X : Y

例如判断是否为函数类型:

type IsFunction = T extends (...args: any[]) => any ? true : false;

当传入函数类型时返回 true,否则返回 false

TypeScript 会对裸类型参数(即未包装的泛型)在联合类型中做分布式计算。例如:

type ToArray<T> = T extends any ? T[] : never;
type StrArrOrNumArr = ToArray<string | number>; // string[] | number[]

这种“分布性”使得条件类型在处理复杂映射时非常强大。

映射类型与内置工具类型

映射类型基于已有类型创建新类型,通过遍历属性来修改其修饰符或类型。

常见用法:

PatentPal专利申请写作
PatentPal专利申请写作

AI软件来为专利申请自动生成内容

下载
  • Partial<T>:将所有属性变为可选
  • Readonly<T>:使所有属性只读
  • Pick<T, K>:从 T 中选取一组属性 K
  • Record<K, T>:构造一个属性名来自 K,属性类型为 T 的对象类型

也可以自定义映射类型:

type OptionalProps<T> = {
  [P in keyof T]?: T[P];
};

它等价于 Partial<T>,展示了如何手动控制属性的可选性。

类型推断 infer

infer 关键字用于在条件类型中声明待推断的类型变量。

典型例子是从函数返回值中提取类型:

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;

当 T 是函数时,infer R 捕获其返回类型,并作为结果返回。

还可用于提取数组元素类型:

type ElementType<T> = T extends (infer U)[] ? U : T;

若 T 是数组,则返回元素类型 U,否则返回 T 本身。

递归类型与模板字面量类型

TypeScript 支持递归定义类型,适用于树形结构或嵌套对象。

例如定义一个无限层级的 JSON 类型:

type Json =
  string | number | boolean | null |
  Json[] | { [key: string]: Json };

注意避免无限展开导致编译错误

模板字面量类型(Template Literal Types)结合字符串字面量和类型运算,实现更精确的字符串约束。

例如:

type Size = 'small' | 'large';
type Color = 'red' | 'blue';
type Style = `${Size}-${Color}`;
const s: Style = 'small-red'; // OK

这在构建 CSS 类名或事件名称时特别有用。

基本上就这些。掌握这些进阶类型机制后,你可以编写高度抽象、类型安全的工具类型和泛型组件,让 TypeScript 成为你代码结构的坚实骨架。不复杂但容易忽略的是细节上的类型分布与推断时机,多实践才能熟练运用。

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

49

2026.02.13

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

196

2026.02.25

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

43

2026.03.13

什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

411

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

251

2023.10.07

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 中文开发手册
Go 中文开发手册

共0课时 | 592人学习

Go语言教程手册
Go语言教程手册

共23课时 | 18.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号