有电书房店铺主页二维码
有电书房
微信扫描二维码,访问我们的微信店铺

TypeScript经典实例

108.80 限时折扣 原价:¥115.20
运费: ¥ 5.00-22.00
库存: 300 件
TypeScript经典实例 商品图0
TypeScript经典实例 商品图1
TypeScript经典实例 商品图2
TypeScript经典实例 商品图3
TypeScript经典实例 商品缩略图0 TypeScript经典实例 商品缩略图1 TypeScript经典实例 商品缩略图2 TypeScript经典实例 商品缩略图3

商品详情

书名:TypeScript经典实例
书号:978-7-5239-0534-0
定价:128元
作者:[奥地利]斯蒂芬鲍姆加特纳(Stefan Baumgartner)
出版时间:2025-11-20
出版社:中国电力出版社
页码: 488    字数(千字):561
开本:16开    版次:1    印次:1


品牌介绍

中国电力出版社成立于 1951 年,作为中国成立最早的中央科技出版社之一,曾隶属于水利电力部、能源部、电力工业部、国家电力公司,现为国家电网公司所属的科技出版社,在电气技术专业出版领域享有极高的声誉。该社作为以图书出版为主体,音像、电子出版物、期刊、网络出版共同发展的大型出版企业,以强大的出版资源和高素质的专业队伍,致力于向读者提供包括电力工程、电气工程、建筑工程、电子技术、信息技术、外语、大中专教材、家教等学科门类齐全的权威出版物,也竭力为广大师生提供精品教材,是教育部和北京市教委规划教材的出版基地之一。


编辑推荐

编辑推荐 TypeScript是JavaScript开发人员最重要的工具之一。然而,即便是经验丰富的开发人员,也会疑惑TypeScript编译器为什么输出红色波浪线。阅读本书吧!在这本实用指南中,作者Stefan Baumgartner为高级工程师提供了TypeScript日常问题的解决方案。 本书为熟悉JavaScript和TypeScript基础知识的开发人员提供了一些切实可行的方案,有助于解决各种问题。书中的经典实例自成一体,涵盖设置复杂的项目结构和开发高级辅助类型,详细分析问题并讨论方案背后的原理和具体措施。 专家推荐 “本书教你使用高级类型解决各种问题。更棒的是,这本书还教你如何使用TypeScript的特性创建新类型。” ——Nathan Shively-Sanders TypeScript团队的软件工程师


产品特色

本书以实用为主,内容言简意赅、通俗易懂,实用、适用、够用是本书的编写理念。全书采用理论和实践相结合、由浅入深的方式来阐述TypeScript在实际工作中的各种应用,相信读者在阅读过程中不会感觉到枯燥乏味。


作者介绍

Stefan Baumgartner是oida.dev的Rust和TypeScript独立培训师,也是Dynatrace的高级产品架构师,主管TypeScript开发工具、库和语言运行时的开发工作。他在热门博客fettblog.eu上撰写有关TypeScript的文章,2020年在Smashing Magazine上出版了他的第一本TypeScript著作TypeScript in 50 Lessons。


内容介绍

本书的主要内容有:深入研究TypeScript类型系统的内部工作原理。将TypeScript集成到各种项目中。定义高级类型,灵活适应不同场景。创建跨项目可用的辅助类型。确保可读性和类型安全性。有效地为依赖字符串字面量的函数签名定义类型。解决标准库的限制。将TypeScript集成到复杂的React项目中。运用类型开发策略,包括类型测试。识别类型系统对规则做出例外处理的情况。
本书适用于本书面向掌握JavaScript 基础并初步接触TypeScript 的开发人员、工程师和架构师。


前言

前言 当你以实体或数字形式翻开本书阅读这句话时,我知道你对TypeScript 这门近年来最流行的编程语言之一怀有兴趣。根据2022 年JavaScript 现状调查(https://2022.stateofjs.com),近70% 的受访者正在积极使用TypeScript。根据2022 年的StackOverflow 调查(https://survey.stackoverflow.co/2022),TypeScript 是最受欢迎的五种语言之一,用户满意度排名第四。2023 年初,TypeScript 在NPM 上的周下载量已突破4000 万次(https://oreil.ly/ZHWn8)。 毫无疑问,TypeScript 是一种现象级存在! 尽管广受欢迎,TypeScript 仍令许多开发人员困扰。“与类型检查器搏斗”是常见抱怨,另一句流行语是“随便写几个any 让它闭嘴”。有人认为这拖慢了开发节奏,明明代码能正常运行,却要取悦编译器。然而,TypeScript 的初衷是提升JavaScript 开发人员的效率。究竟是工具未能达成目标,还是开发人员的期待与工具设计初衷存在偏差? 答案介于两者之间,这也正是本书的价值所在。本书汇集了百余个经典实例,涵盖从复杂项目配置到高级类型技巧的方方面面。你将领会类型系统的精妙设计与运作机制,理解TypeScript 为了兼容底层基础JavaScript 所作出的权衡与例外。你还将掌握方法论、设计模式和开发技巧,写出更健壮的TypeScript 代码。 最终,你不仅知道“如何做”,更将懂得“为什么这样做”。 我的目标是提供一本从新手到专家的进阶指南,同时具备长期参考价值。面对TypeScript 每年四个版本的更新节奏,本书聚焦语言的持久特性,为你应对未来变化夯实基础。欢迎开启TypeScript 探秘之旅! 目标读者 本书面向掌握JavaScript 基础并初步接触TypeScript 的开发人员、工程师和架构师。你已理解类型的基本概念及其应用价值,能体会静态类型的即时益处。此刻你正站在深入探索的起点:需要更透彻的类型系统知识,不仅要确保应用健壮可扩展,更要保障团队协作效率。 你渴望了解TypeScript 特性的行为逻辑及其设计哲学—— 这正是本书的交付价值。你将学习项目配置、类型系统特性、复杂类型应用、框架集成以及类型开发方法论。本书致力于引领你从新手成长为学徒,最终蜕变为专家。无论你是需要系统学习高级特性,还是寻求职业生涯的可靠参考,本书都是理想之选。 内容概览 写作本书的主要目的是专注于解决日常问题。TypeScript 是一门出色的编程语言,其类型系统的特性非常强大,以至于人们开始用高级TypeScript 谜题挑战自己(https://tsch.js.org)。虽然这些脑力游戏很有趣,但往往脱离现实,因此本书刻意回避。 我希望确保所呈现的内容是TypeScript 开发人员在日常生活中会遇到的情况,问题的来源都是真实场景,解决方案都是全面的。我教你的技术和方法可以运用到多种场景,而不仅限于单个示例。整本书中有许多对之前内容的引用,目的是告诉你如何把特定技术应用在新场景中。 书中的示例要么源自真实项目的源码,要么精简至核心概念,不要求你掌握太多领域知识。虽然有些示例非常具体,但你也会看到许多名为“Stefan”的Person 对象(还能看到我年龄的增长)。 本书几乎完全专注于TypeScript 在JavaScript 之上添加的特性。因此,为了完全理解示例,你需要掌握一定的JavaScript 知识。不是说你必须是JavaScript专家,但是要能读懂基本的JavaScript 代码。JavaScript 和TypeScript 有着紧密联系,书中有些章节讨论的是JavaScript 特性及其行为,不过始终通过TypeScript 的视角来呈现。 经典实例类书籍旨在为你提供问题的快速解决方案。本书中,每个经典实例都以“讨论”结尾,为你提供解决方案的更广泛背景和意义。根据作者的风格,O’Reilly 经典实例类书籍的重点要么放在解决方案上,要么放在讨论上。本书肯定偏向讨论。在近20 年的软件开发职业生涯中,我从未遇到过适用于所有问题的解决方案。这就是为什么我想要详细向你展示如何得出结论、结论的意义以及权衡取舍。所以,我把本书写成了讨论型指南。当你能为自己的决策提供充分的论据时,何必靠猜测呢? 内容编排 本书带领你系统性学习TypeScript 语言。我们从项目配置开始,讨论基础类型和类型系统的工作原理,最终进入条件类型和辅助类型等高级话题。随后探讨特定功能,例如类的二元性和对React 的支持,最后介绍类型开发的最佳实践。全书虽有一条贯穿线,但每个章节和每个经典实例都可独立阅读。每个经典实例都指向书中前后的关联内容,但每一章本身是独立的。你可以选择从头到尾按序阅读,或者通过众多交叉引用“自选冒险”。以下是本书内容概览。 TypeScript 意欲兼容所有JavaScript 风格,而JavaScript 风格众多。第1 章介绍不同JavaScript 运行时、模块系统和目标平台的配置选项。 第2 章带领你了解类型层次结构,区分any 和unknown,解释代码如何影响不同的命名空间,并解答选择类型别名还是接口描述对象类型这个永恒问题。 第3 章是本书较长的一章,全面介绍联合类型与交叉类型、如何定义可区分联合类型、如何使用断言never 和可选never 技术,以及如何视情况收窄和拓宽类型。读完本章后,你将理解TypeScript 为何有类型断言而没有类型转换、为何枚举通常不受推荐,以及如何在结构类型系统中找到名义类型元素。 第4 章深入探讨TypeScript 的泛型系统。泛型不仅能提升代码复用性,还是进入TypeScript 高级特性的入口。本章是你从基础迈向类型系统更精妙领域的分水岭。 第5 章阐释TypeScript 类型系统为何是其自身的元编程语言。通过基于条件的类型选择,人们创造出完整的SQL 解析器和字典等惊人成果。我们用条件类型增强静态类型系统对动态场景的适应性。 第6 章展示TypeScript 如何在类型系统中集成字符串解析器。从格式字符串中提取名称、基于字符串输入动态定义事件系统、动态创建标识符,一切皆有可能! 第7 章浅尝函数式编程。元组(tuple)在TypeScript 中具有特殊意义:描述函数参数、类数组对象,创建灵活的辅助函数。 第8 章深入元编程。TypeScript 内置一些辅助类型,让类型派生更加简便。你不仅学习如何使用,还将自己创建。本章是另一个里程碑,至此你已掌握TypeScript 语言和类型系统的所有基础要素,为进入下一阶段做好了准备。经过前八章深入理解类型系统细节后,第9 章教你整合知识处理他人编写的类型定义。本章展示出乎意料的工作场景,以及如何定制内置类型定义。 第10 章介绍最流行的JavaScript 框架之一如何与TypeScript 集成、支持JSX句法扩展的特性,以及与TypeScript 整体概念的契合。你将学习为组件和钩子编写健壮类型,以及如何处理事后附加到库上的类型定义文件。 第11 章讨论类,这个在TypeScript 中存在远早于JavaScript 的面向对象编程支柱,以及类带来的功能二元性。 第12 章作为全书终点,重点培养你自主创建高级类型、做出推动项目的正确决策,以及利用库验证类型的能力。此外,本章还将介绍特殊的变通方案和隐藏特性,并讨论泛型命名及高级类型是否过度等问题。本章特别有趣,因为完成从新手到学徒的漫长旅程后,你将变身专家。 所有示例可在本书配套网站(https://typescript-cookbook.com)的TypeScript 演练场或CodeSandbox 项目中获取。演练场特别提供中间状态供你自行探索,摸透行为。我坚信,仅靠阅读无法学会编程语言,必须动手实践才能真正理解各个要素如何协同。请牢记于心,开始享受类型编程的乐趣吧! 体例 编程约定 TypeScript 支持多种编程风格和格式化选项。为避免偏离主题,我选择使用Prettier(https://prettier.io)自动格式化所有示例。如果你习惯不同风格,例如喜欢在类型属性声明后使用逗号而非分号,完全可以保持自己的偏好。 本书包含大量函数示例。函数有多种编写方式,我主要采用函数声明而非函数表达式,除非需要特别说明二者的区别。其他情况下多为风格偏好而非技术原因。 所有示例已通过TypeScript 5.0 验证(写作本书时的最新版本)。TypeScript 持续演化,规则亦然。本书确保聚焦长期稳定、跨版本可信的要素。对于预期会有重大变化的部分,我会给出相应警示和说明。 排版约定 本书采用以下排版约定。 斜体(Italic) 表示新术语、URL、电子邮件地址、文件名和文件扩展名。 等宽字体(Constant width) 表示程序清单,以及正文中出现的程序元素,包括变量名、函数名、数据库、数据类型、环境变量、语句和关键字。 等宽斜体(Constant width italic) 表示应替换为用户提供值或由上下文确定值的文本。 使用代码示例 补充材料(代码示例、练习等)可从https://typescript-cookbook.com 下载。 如需技术支持或对代码示例的使用有疑问,请发邮件至support@oreilly.com。 本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序或文档中。除非你使用了很大一部分代码,否则无须联系我们获得许可。比如,用本书的几个代码片段写一个程序就无须获得许可。销售或分发O’Reilly 图书的示例需要获得许可,引用本书中的示例代码回答问题无须获得许可,将书中大量的代码放到你的产品文档中需要获得许可。 我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN,例如:“TypeScript Cookbook by Stefan Baumgartner (O’Reilly). Copyright 2023 Stefan Baumgartner, 978-1-098-13665-9”。 如果你觉得自己对示例代码的使用超出了上述许可范围,请通过permissions@oreilly.com 与我们联系。 O’Reilly 在线学习平台(O’Reilly Online Learning) 近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。 公司独有的专家和改革创新者网络通过O’Reilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。O’Reilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自O’Reilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:https://www.oreilly.com/。 联系我们 任何有关本书的意见或疑问,请按照以下地址联系出版社。 美国: O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 中国: 北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035) 奥莱利技术咨询(北京)有限公司 本书网页列出勘误、示例及其他信息:https://oreil.ly/typescript-cookbook。 对本书中文版有任何建议可以发电子邮件到errata@oreilly.com.cn。 要了解更多O’Reilly 图书和培训信息,请访问https://oreilly.com。 我们的LinkedIn:https://linkedin.com/company/oreilly-media。 我们的Twitter:https://twitter.com/oreillymedia。 我们的YouTube:https://youtube.com/oreillymedia。 致谢 Alexander Rosemann、Sebastian Gierlinger、Dominik Angerer 和Georg Kothmeier是我有新想法时的首批倾听者。我们的定期交流不仅有趣,更为我评估各种选择提供必要反馈。他们是最早得知本书消息的人,也是首批反馈来源。 与Matt Pocock、Joe Previte、Dan Vanderkam、Nathan Shively-Sanders 和Josh Goldberg 在社交媒体的互动带来诸多新思路。尽管他们对TypeScript 的理解角度不同,但拓宽了我的视野,确保我不致观点偏颇。 Phil Nash、Simona Cotin 和Vanessa Böhner 不仅是最终手稿的早期审阅者,更是长期良伴益友,始终为我的想法提供理性检验。Addy Osmani 对我的启发贯穿整个职业生涯,我十分荣幸请到他为我的新书作序。 Lena Matscheko、Alexandra Rapeanu 和Mike Kuss 毫不犹豫地用真实场景中的技术挑战轰炸我。当我缺乏合适示例时,他们总是能提供大量优秀素材供我提炼。 若非Peter Kröner 在新TypeScript 版本发布时不断“敲门提醒”,我可能会迷失在TypeScript 的发展中。我们二人关于TypeScript 的播客节目已成传奇,尽管内容正变得与TypeScript 越来越无关。 技术编辑Mark Halpin、Fabian Friedl 和Bernhard Mayr 提供了最理想的技术反馈。他们质疑每个假设、检查每个代码示例,确保所有推理合理且毫无遗漏。 他们对细节的热爱和高水平的讨论能力,使本书不仅是热门观点的集合,更成为立足坚实基础的指导和参考。 没有Amanda Quinn,本书将不复存在。2020 年写完TypeScript in 50 Lessons 后,我以为已道尽关于TypeScript 的一切。是Amanda 促使我尝试经典实例类书籍的想法,看看哪些创意未能入选第一本书。三小时后,我就完成包含百余条目的完整提案和目录。Amanda 是对的,我还有很多话要说。永远感激她的支持和指导。 Amanda 协助早期工作后,Shira Evans 确保项目进展顺利不脱轨。她的反馈极富价值,务实而亲力亲为的方式使合作充满乐趣。 Elizabeth Faerm 和Theresa Jones 负责制作环节。他们对细节的把握出众,确保制作阶段激动人心且充满乐趣!最终成果精美至上,令我爱不释手。 写作期间,Porcupine Tree、Beck、Nobuo Uematsu、Camel 和The Beta Band等音乐人给予了我巨大帮助。 本书最大贡献来自我的家人。Doris、Clemens 和Aaron 拥有我向往的一切,没有他们无尽的爱与支持,我无法追求伟大抱负。感谢你们给予我的一切!


目录

目录
序 1
前言 3
第1 章 项目配置 13
11 JavaScript 类型检查 14
12 安装TypeScript 18
13 把类型放在一旁 22
14 将项目迁移到TypeScript 25
15 从Definitely Typed 加载类型 28
16 设置全栈项目 31
17 设置测试37
18 从URL 获取ECMAScript 模块的类型 40
19 在Node 中加载不同类型的模块 44
110 使用Deno 及其依赖 48
111 使用预定义配置 51
第2 章 基本类型 55
21 有效注解55
22 使用any 和unknown 60
23 选择正确的对象类型 63
24 使用元组类型 66
25 区别接口和类型别名 70
26 定义函数重载 73
27 定义this 参数类型 76
28 使用符号80
29 理解值和类型命名空间 84
第3 章 类型系统 89
31 使用联合类型和交叉类型建模数据89
32 使用可区分联合类型显式定义模型94
33 使用断言never 技术穷尽检查 97
34 使用常量上下文固定类型 101
35 使用类型谓词收窄类型 106
36 理解void 108
37 在catch 子句中处理错误类型 112
38 使用可选never 创建互斥模型 116
39 有效使用类型断言 118
310 使用索引签名 122
311 区分缺失属性和未定义值 127
312 使用枚举 130
313 在结构类型系统中定义名义类型 136
314 为字符串子集启用宽松的自动补全 140
第4 章 泛型 143
41 泛化函数签名 144
42 创建有关联的函数参数 147
43 摆脱any 和unknown 151
44 理解泛型实例化 154
45 生成新对象类型 159
46 使用断言签名修改对象 165
47 使用类型映射来映射类型 168
48 使用ThisType 定义对象中的this 174
49 为泛型类型参数添加常量上下文 178
第5 章 条件类型 183
51 管理复杂的函数签名 183
52 使用never 过滤 188
53 按种类分组元素 193
54 移除对象的特定属性 200
55 推导条件中的类型 204
第6 章 字符串模板字面类型 211
61 自定义事件系统 212
62 使用字符串操作类型和键重映射创建事件回调 215
63 编写格式化函数 219
64 提取格式参数类型 223
65 处理递归限制 227
66 把模板字面量用作判别属性 231
第7 章 可变元组类型 237
71 为concat 函数定义类型 238
72 为promisify 函数定义类型 241
73 为curry 函数定义类型 246
74 为灵活的curry 函数定义类型 250
75 为最简单的curry 函数定义类型 254
76 从元组创建枚举 257
77 拆分函数签名的所有元素 262
第8 章 辅助类型 265
81 把特定属性设为可选 266
82 修改嵌套对象 270
83 重映射类型 274
84 获取所有必需的键 277
85 至少设定一个属性 281
86 仅设定一个属性,以及全部设定或全不设定 287
87 把联合类型转换为交叉类型 292
88 使用typefest300
第9 章 标准库和外部类型定义 305
91 使用Objectkeys 遍历对象 306
92 通过类型断言和unknown 突出不安全操作 310
93 使用defineProperty 313
94 扩展Arrayprototypeincludes 的类型 319
95 过滤空值324
96 扩展模块326
97 增强全局命名空间 329
98 将非JS 模块添加到模块图 334
第10 章 TypeScript 和React 337
101 编写代理组件 338
102 编写受控组件 341
103 为自定义钩子定义类型 344
104 为泛化forwardRef 组件定义类型 347
105 为上下文API 提供类型 352
106 为高阶组件定义类型 358
107 为React 合成事件系统中的回调定义类型 361
108 为多态组件定义类型 364
第11 章 类 371
111 选择合适的可见性修饰符 372
112 显式定义方法覆盖 378
113 描述构造函数和原型 382
114 在类中使用泛型 386
115 决定何时使用类或命名空间 390
116 编写静态类 395
117 严格的属性初始化 400
118 在类中使用this 类型 406
119 编写装饰器 411
第12 章 类型开发策略 419
121 编写低维护量类型 420
122 逐步完善类型 423
123 使用satisfies 检查契约 436
124 测试复杂类型 441
125 使用Zod 在运行时验证数据类型 443
126 解决索引访问限制 449
127 使用函数重载还是条件类型 452
128 泛型的名称 460
129 在TypeScript Playground 中设计原型 462
1210 提供库的多个版本 467
1211 适可而止 471


有电书房店铺主页二维码
有电书房
扫描二维码,访问我们的微信店铺

TypeScript经典实例

手机启动微信
扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏

微信支付

支付宝

扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏