深入理解TypeScript

深入理解TypeScript

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

阐述了JavaScript与TypeScript的关系,TypeScript类型系统的基础语法、编译原理等。

内容简介

TypeScript是一种由微软开发的、开源的编程语言,近两年来发展很迅猛,已经成为很多大型项目的标配。本书涵盖了TypeScript的大部分知识点,并对其进行了细致的讲解;本书示例丰富、简单易懂,你甚至可以直接把这些例子用于自己的开发工作;本书还对TypeScript编译原理进行了深入的剖析,力争让读者知其然,并知其所以然。本书不仅为TypeScript初学者安排了与JavaScript相关的基础知识,而且对高级编程技巧、编译原理进行了深入浅出的解读,相信对于想深入了解TypeScript的开发者来说,通过阅读本书也能获得较大的提升。

作者简介

本书作者Basarat Ali Syed,是TypeScript专家,微软JavaScript/TypeScript的MVP贡献者。他是TypeScript社区受人尊敬的成员,澳洲Picnic software高级开发人员,在DefinitelyTyped团队工作。Basarat经常参加澳大利亚与前端开发技术有关的会议,在多个技术活动中做过演讲。Basarat还著有Beginning Node.js一书,目前该书已被下载39000多次,在ya马逊、豆瓣等平台得到了读者的一致好评。

章节目录

版权信息

译者序

前言

第1章 为什么要使用TypeScript

1.1 开始使用TypeScript

1. TypeScript版本

2. 获取源代码

1.2 选择TypeScript的理由

1. TypeScript的类型系统

2. 支持未来的JavaScript所具有的功能

1.3 总结

第2章 JavaScript常见语法

2.1 相等

2.2 引用

1. 变化将会贯穿整个引用

2. 引用相等

2.3 null和undefined

1. 检查是否相等

2. 检查根级别上的undefined

3. 限制显式地使用undefined

4. Node风格的回调函数

5. 不要把undefined作为有效的表示方式

6. JSON和序列化

7. 小结

2.4 this

2.5 闭包

2.6 数字

1. 核心类型

2. 十进制

3. 整数

4. big.js

5. NaN

6. 无穷

7. 最小值

2.7 truthy

第3章 JavaScript 新语法特性

3.1 类

1. 继承(extends)

2. 静态(static)

3. 访问修饰符

4. 抽象(abstract)

5. 构造器(constructor)

6. 属性初始化

7. IIFE发生了什么

8. __extends

3.2 箭头函数

1. 箭头函数的用处

2. 箭头函数是危险的

3. 箭头函数和使用this的库

4. 箭头函数和继承

5. 快速返回对象

3.3 rest参数

3.4 let

1. 函数会创建新的作用域

2. 生成JavaScript

3. switch

4. 闭包中的let

5. 小结

3.5 const

1. const声明必须初始化

2. 赋值符号的左边不能是一个常量

3. 块作用域

4. 深层次的不变性

3.6 解构

1. 对象解构

2. 数组解构

3. 生成JavaScript

4. 小结

3.7 扩展运算符

1. apply

2. 在解构中使用

3. 数组扩展

4. 对象扩展

5. 小结

3.8 for...of

1. 生成JavaScript

2. 限制

3. 小结

3.9 迭代

3.10 模板字符串

1. 字符串插值

2. 多行字符串

3. 标记模板

4. 生成JavaScript

5. 小结

3.11 Promise

1. 回调函数风格的代码

2. 使用Promise处理异步和回调函数

3. 并行流程控制

4. 将回调函数转为Promise

3.12 generators

1. 惰性迭代器

2. 外部控制执行

3.13 async/await

1. 产生JavaScript

2. TypeScript 对 async/await 的支持

第4章 TypeScript项目构成

4.1 编译上下文

1. tsconfig.json

2. 指定文件

4.2 声明空间

1. 类型声明空间

2. 变量声明空间

4.3 模块

1. 全局模块

2. 文件模块

3. globals.d.ts

4.4 命名空间

4.5 动态导入表达式

第5章 快速创建TypeScript项目

5.1 在Node.js中使用TypeScript

5.2 在浏览器中使用TypeScript

1. 通用设置

2. 快速开始

3. 项目设置详解

4. 发布应用

5.3 创建一个TypeScript模块

第6章 TypeScript类型系统

6.1 基本概念

1. 基本注解

2. 基本类型注解

3. 数组注解

4. 接口注解

5. 内联类型注解

6. 特殊类型

7. 泛型

8. 联合类型注解

9. 交叉类型

10. 元组类型

11. 类型别名

6.2 迁移JavaScript代码至TypeScript

1. 减少错误

2. 第三方JavaScript代码

3. 第三方npm模块

4. 额外的非JavaScript资源

6.3 @types

1. 使用@types

2. 全局@types

3. 模块@types

4. 控制全局

6.4 环境声明

1. 声明文件

2. 变量

6.5 接口

1. 类可以实现接口

2. 注意:并非每个接口都很容易实现

6.6 枚举

1. 数字枚举与数字类型

2. 数字枚举与字符串类型

3. 改变与数字枚举相关联的数字

4. 使用数字枚举做标记

5. 字符串枚举

6. 常量枚举

7. 有静态方法的枚举

8. 开放式枚举

6.7 lib.d.ts

1. 观察lib.d.ts的内容

2. 修改本地类型

3. 使用你自己定义的lib.d.ts

4. 编译目标对lib.d.ts的影响

5. --lib选项

6. 在旧JavaScript引擎中使用polyfill

6.8 函数

1. 参数注解

2. 返回类型注解

3. 可选参数

4. 重载

5. 声明函数

6.9 可调用

1. 一个实例

2. 箭头函数

3. 可实例化

6.10 类型断言

1. as Foo与

2. 类型断言与类型转换

3. 类型断言被认为是有害的

4. 双重断言

TypeScript怎么确定单个断言是否足够

6.11 Freshness

1. 允许额外的属性

2. 用例:React state

6.12 类型保护

1. typeof

2. instanceof

3. in

4. 字面量类型保护

5. strictNullChecks 编译属性下的null 和 undefined

6. 使用自定义的类型保护

7. 类型保护和回调函数

6.13 字面量类型

1. 字符串字面量

2. boolean和number字面量

3. 推断

4. 用例:基于字符串的枚举

6.14 readonly

1. readonly用例

2. 其他用例

3. readonly与const

6.15 泛型

1. 动机和示例

2. 设计模式

6.16 类型推断

1. 定义变量

2. 函数返回类型

3. 赋值

4. 结构化

5. 解构

6. 警告

6.17 类型兼容性

1. 稳定性

2. 结构化

3. 变体

4. 函数

5. 枚举

6. 类

7. 泛型

8. 脚注:不变性(Invariance)

6.18 never

1. 用例:详细的检查

2. never与void的差异

6.19 辨析联合类型

1. 详细的检查

2. switch

3. strictNullChecks

4. 版本控制

5. Redux

6.20 索引签名

1. TypeScript索引签名

2. 声明一个索引签名

3. 所有成员必须符合字符串索引签名

4. 使用一组有限的字符串字面量

5. 同时拥有string和number类型的索引签名

6. 设计模式:索引签名的嵌套

7. 从索引签名中排除某些属性

6.21 类型移动

1. 复制类型和值

2. 捕获变量的类型

3. 捕获类成员的类型

4. 捕获字符串类型

5. 捕获键的名称

6.22 异常处理

1. 错误子类型

2. 尽量使用Error

3. 并不是一定要throw一个错误

4. exceptional的用例

6.23 混合

1. 创建一个构造函数

2. 扩展一个类并返回它

6.24 ThisType

第7章 关于 JSX

7.1 React JSX

1. 程序安装

2. HTML标签与组件

3. 类型检查

4. 默认的props

7.2 非React JSX

第8章 TypeScript编译选项设置

8.1 boolean选项

8.2 noImplicitAny

8.3 strictNullChecks

1. 非空断言操作符

2. 明确赋值断言操作符

第9章 TypeScript错误处理

9.1 解读错误

1. 错误信息分类

2. 如何在 IDE 提示工具中显示一个错误

9.2 常见的错误

1. TS2304

2. TS2307

3. TS1148

4. 捕获不能有类型注解的简短变量

5. 接口ElementClass不能同时扩展两个Component类型

第10章 开发与测试工具

10.1 npm

1. npm的快速常见设置

2. 安全性

3. npm脚本——脚本里的--

4. 公有包和私有包

10.2 在Jest中使用TypeScript

1. 步骤1:安装Jest

2. 步骤2:配置Jest

3. 步骤3:运行测试

4. 选择Jest的理由

10.3 Prettier

1. 安装程序

2. 使用方法

10.4 Husky

10.5 ESlint

1. 安装

2. 配置

3. 运行

4. 在VS Code 中的配置

10.6 Changelog

1. 提交约定信息

2. 安装步骤

3. 发布

第11章 提示与建议

11.1 名义化类型

1. 使用字面量类型

2. 使用枚举

3. 使用接口

11.2 状态函数

11.3 柯里化

11.4 泛型的实例化类型

11.5 对象字面量的惰性初始化

1. 最好的解决方案

2. 快速解决方案

3. 折中的解决方案

11.6 类是有用的

11.7 默认导出被认为是有害的

1. 可发现性差

2. 自动完成

3. 与CommonJS互用

4. 防止拼写错误

5. 关于TypeScript 自动导入

6. 关于再次导出

7. 关于动态导入

8. 当不是类也不是函数时,需要两行语句

11.8 减少setter属性的使用

11.9 谨慎使用--outFile

1. 运行时错误

2. 快速编译

3. 全局作用域

4. 难以分析

5. 难以扩展

6. _references.ts

7. 代码重用

8. 多目标

9. 单独编译

11.10 TypeScript的静态构造函数

11.11 单例模式

11.12 函数参数

11.13 构建切换

11.14 barrel

11.15 创建数组

11.16 类型安全的Event Emitter

11.17 Reflect Metadata

1. 基础

2. 获取类型信息

3. 自定义metadataKey

4. 用例

11.18 协变与逆变

1. 一个有趣的问题

2. 扩展讲解

3. 其他类型

第12章 TypeScript代码风格指南与代码约定

12.1 变量和函数

12.2 类

12.3 接口

12.4 类型别名

12.5 命名空间

12.6 枚举类型

12.7 null和undefined

12.8 格式化

1. 引号

2. 空格

3. 分号

4. 数组

5. type和interface

第13章 TypeScript编译原理

13.1 编译器

1. BYOTS

2. 语法和语义

3. 处理概览

4. 文件:核心工具

5. 文件:关键数据结构

6. 文件:系统

13.2 程序

1. CompilerHost的使用

2. SourceFile

13.3 抽象语法树

1. Node节点

2. SourceFile

3. AST技巧:访问子节点

4. AST技巧:SyntaxKind枚举

5. AST杂项

13.4 扫描器

1. 解析器对扫描器的使用

2. 扫描器状态

3. 独立扫描器

13.5 解析器

1. 程序对解析器的使用

2. 用例

3. 解析器函数

13.6 绑定器

1. 符号

2. 检查器对绑定器的使用

3. 绑定器函数

4. 绑定器声明

5. 绑定器容器

6. 绑定器符号表

7. 绑定器错误报告

13.7 检查器

1. 程序对检查器的使用

2. 与发射器的联系

3. 全局命名空间合并

4. 检查器错误报告

13.8 发射器

1. Promgram对发射器的使用

2. 发射器函数

3. 发射器SourceMap

深入理解TypeScript是2020年由电子工业出版社出版,作者[澳]BasaratAliSyed。

得书感谢您对《深入理解TypeScript》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。