元数据

TypeScript入门与实战

  •  TypeScript入门与实战|200
  • 书名: TypeScript入门与实战
  • 作者: 钟胜平编著
  • 简介: TypeScript是一个开源的、跨平台且带有类型系统的avaScript超集,可以编译为纯JavaScript,然后运行在任意浏览器和其他环境中,使开发者可以使用一些未来JavaScript标准(ECMAScript 6和7)中的特性。TypeScript为JavaScript添加了可选的静态类型、类和模块,可使大型JavaScript应用使用更好的工具,并保持更清晰的结构。本书系统化介绍TypeScript程序设计,包括四大部分。第一篇“初识TypeScript”介绍TypeScript与JavaScript的关系以及快速开始编写第一个TypeScript程序,第二篇“TypeScript语言概览”介绍TypeScript语言基础、迭代器与生成器、装饰器、命名空间、模块等。第三篇“TypeScript类型系统”介绍TypeScript类型,如面量、枚举、非Nullable、非Nullable等,还介绍了更多高级类型,如联合、交叉、索引、映射对象、泛型、类类型、接口、类型别名、多态的this、有条件类型、类型查询、类型断言等,最后介绍类型更深入内容,如类型声明合并、类型推论、类型兼容性、外部类型声明、编写声明文件等。第四篇“TypeScript应用”通过综合案例介绍TypeScript的配置管理、开发技巧等。
  • 出版时间 2020-11-01 00:00:00
  • ISBN: 9787111669722
  • 分类: 计算机-编程设计
  • 出版社: 机械工业出版社

高亮划线

3.3.5 Number

  • 📌 JavaScript不详细区分整数类型、浮点数类型以及带符号的数字类型等。JavaScript使用双精度64位浮点数格式(IEEE 754)来表示数字,因此所有数字本质上都是浮点数。 ^35433566-43-465-556
    • ⏱ 2021-12-14 18:06:00

3.3.6 Symbol

  • 📌 每一个Symbol值都是唯一的且不可改变的。Symbol值的主要应用场景是作为对象的属性名。 ^35433566-44-499-545

    • ⏱ 2021-12-14 18:06:48
  • 📌 JavaScript提供了一个全局的“Symbol()”函数来创建Symbol类型的值。我们可以将“Symbol()”函数想象成GUID(全局唯一标识符)的生成器 ^35433566-44-764-845

    • ⏱ 2021-12-14 18:10:46

3.3.7 Object

  • 📌 键值只能为字符串或Symbol值。所有字符串(也包括空字符串)和Symbol值都是合法的键值。 ^35433566-45-716-763
    • ⏱ 2021-12-14 18:15:01

3.4.4 字符串字面量

  • 📌 JavaScript中的主流编码风格推荐使用单引号表示字符串字面量。 ^35433566-50-515-549
    • ⏱ 2021-12-14 18:16:18

3.4.5 模板字面量

  • 📌 模板字符串的基本语法是使用反引号“`”(键盘上数字键1左侧的按键)替换了字符串字面量中的单、双引号。 ^35433566-51-540-590
    • ⏱ 2021-12-14 18:16:30

3.5.1 对象字面量

  • 📌 存取器属性的语法如下所示 ^35433566-53-955-967

    • ⏱ 2021-12-14 18:18:54
  • 📌 可计算属性名适用于对象属性名需要动态计算的场景之中。属性名表达式求值后将得到一个字符串或Symbol值,该字符串或Symbol值将被用作对象属性名。 ^35433566-53-1339-1413

    • ⏱ 2021-12-14 18:22:37

3.6.2 数组中的元素

  • 📌 JavaScript中的数组 ^35433566-57-665-679

    • ⏱ 2021-12-14 18:25:34
  • 📌 本质上是对象 ^35433566-57-689-695

    • ⏱ 2021-12-14 18:25:43

3.7.2 函数表达式

  • 📌 立即执行的函数表达式 ^35433566-60-997-1007

    • ⏱ 2021-12-14 18:30:44
  • 📌 包围函数表达式的一对小括号 ^35433566-60-1021-1034

    • ⏱ 2021-12-14 18:30:50
  • 📌 在起始和结尾位置分别添加了分号。这是为了防止使用代码压缩工具处理代码之后产生错误的语法 ^35433566-60-1260-1303

    • ⏱ 2021-12-14 18:30:59

3.7.3 箭头函数

  • 📌 箭头函数本身没有this绑定,它使用外层作用域中的this绑定 ^35433566-61-692-723
    • ⏱ 2021-12-14 18:32:00

5.3.5 symbol与unique symbol

  • 📌 “unique symbol”类型的主要用途是用作接口、类等类型中的可计算属性名。 ^35433566-88-1451-1492

    • ⏱ 2021-12-14 23:10:29
  • 📌 “unique symbol”类型的设计初衷是作为一种变通方法,让一个Symbol值具有字面量的性质 ^35433566-88-1984-2034

    • ⏱ 2021-12-14 23:14:17
  • 📌 在设计上,每一个“unique symbol”类型都是一种独立的类型。在不同的“unique symbol”类型之间不允许相互赋值;在比较两个“unique symbol”类型的值时,也将永远返回false。 ^35433566-88-4009-4113

    • ⏱ 2021-12-14 23:20:56

5.4.3 异构型枚举

  • 📌 在异构型枚举中,必须为紧跟在字符串枚举成员之后的数值型枚举成员指定一个初始值。 ^35433566-94-1005-1044
    • ⏱ 2021-12-14 23:54:57

5.4.4 枚举成员映射

  • 📌 对于数值型枚举 ^35433566-95-703-710

    • ⏱ 2021-12-14 23:56:37
  • 📌 也可以反过来通过枚举成员值去获取枚举成员名 ^35433566-95-731-752

    • ⏱ 2021-12-14 23:56:53

5.4.7 const枚举类型

  • 📌 在编译时,TypeScript编译器会将枚举类型编译为JavaScript对象。 ^35433566-98-506-546
    • ⏱ 2021-12-16 17:59:17

5.7.3 小结

  • 📌 ▪在使用unknown类型之前,必须将其细化为某种具体类型,而使用any类型时则没有任何限制。 ^35433566-108-786-833
    • ⏱ 2021-12-17 15:50:50

5.8 尾端类型

  • 📌 TypeScript中只存在一种尾端类型,即never类型。 ^35433566-109-577-607
    • ⏱ 2021-12-17 15:51:47

5.11.1 Object

  • 📌 Object()”构造函数的类型是ObjectConstructor类型 ^35433566-125-1324-1360

    • ⏱ 2021-12-18 01:51:22
  • 📌 Object类型是特殊对象“Object.prototype”的类型,该类型的主要作用是描述JavaScript中几乎所有对象都共享(通过原型继承)的属性和方法。 ^35433566-125-1628-1709

    • ⏱ 2021-12-18 15:29:44
  • 📌 JavaScript语言中存在自动封箱操作。当在原始值上调用某个方法时,JavaScript会对原始值执行封箱操作,将其转换为对象类型,然后再调用相应方法。Object类型描述了所有对象共享的属性和方法,而JavaScript允许在原始值上直接访问这些方法,因此TypeScript允许将原始值赋值给Object类型。 ^35433566-125-3459-3618

    • ⏱ 2021-12-18 15:51:44
  • 📌 Object类型的用途是描述“Object.prototype”对象的类型,即所有对象共享的属性和方法。在描述自定义对象类型时有很多更好的选择,完全不需要使用Object类型,例如接下来要介绍的object类型和对象字面量类型等。在TypeScript官方文档中也明确地指出了不应该使用Object类型,而是应该使用object类型来代替。 ^35433566-125-4047-4419

    • ⏱ 2021-12-18 15:56:01

5.11.2 object

  • 📌 在object类型上仅允许访问对象的公共属性和方法,也就是Object类型中定义的属性和方法。 ^35433566-126-998-1045
    • ⏱ 2021-12-18 15:58:57

5.12.6 返回值类型

  • 📌 如果一个函数的返回值类型为void,那么该函数只能返回undefined值。这意味着函数明确地返回了一个undefined值,或者函数没有调用return语句,在这种情况下函数默认返回undefined值。 ^35433566-136-1124-1227
    • ⏱ 2021-12-18 16:24:12

5.12.12 重载函数

  • 📌 在TypeScript中,重载函数只存在一个函数实现,开发者需要在这个唯一的函数实现中实现所有函数重载的功能。这就需要开发者自行去检测参数的类型及数量,并根据判断结果去执行不同的操作。 ^35433566-142-4526-4618
    • ⏱ 2021-12-18 16:45:47

5.13.6 索引签名

  • 📌 若接口中同时存在字符串索引签名和数值索引签名,那么数值索引签名的类型必须能够赋值给字符串索引签名的类型。因为在JavaScript中,对象的属性名只能为字符串(或Symbol)。虽然JavaScript也允许使用数字等其他值作为对象的索引,但最终它们都会被转换为字符串类型。因此,数值索引签名能够表示的属性集合是字符串索引签名能够表示的属性集合的子集。 ^35433566-150-2709-2885

    • ⏱ 2021-12-19 10:50:36
  • 📌 一个接口中最多只能定义一个数值索引签名。 ^35433566-150-2462-2482

    • ⏱ 2021-12-19 10:54:08

5.15.6 成员可访问性

  • 📌 在ECMAScript标准中,类的私有字段使用一种新的语法来定义,即在字段标识符前添加一个“#”符号。 ^35433566-164-2840-2891
    • ⏱ 2021-12-19 14:57:27

5.15.14 类类型

  • 📌 类声明将会引入一个新的命名类型,即与类同名的类类型。 ^35433566-172-449-475
    • ⏱ 2021-12-19 15:22:05

6.1.8 泛型类

  • 📌 每个类声明都会创建两种类型,即类的实例类型和类的构造函数类型。泛型类描述的是类的实例类型。因为类的静态成员是类构造函数类型的一部分,所以泛型类型参数不能用于类的静态成员。也就是说,在类的静态成员中不允许引用类型参数。 ^35433566-182-1691-1799
    • ⏱ 2021-12-19 16:00:18

6.4 交叉类型

  • 📌 联合类型表示一个值的类型为多种类型之一,而交叉类型则表示一个值同时属于多种类型。 ^35433566-187-464-504
    • ⏱ 2021-12-19 16:06:02

6.4.2 交叉类型的类型成员

  • 📌 只要交叉类型I中任意一个成员类型包含了属性签名M,那么交叉类型I也包含属性签名M。 ^35433566-189-492-533

    • ⏱ 2021-12-19 16:12:25
  • 📌 若交叉类型的属性签名M在所有成员类型中都是可选属性,那么该属性签名在交叉类型中也是可选属性。 ^35433566-189-1390-1436

    • ⏱ 2021-12-19 16:13:22

6.4.3 交叉类型与联合类型

  • 📌 表示交叉类型的“&”符号与表示联合类型的“|”符号同时使用时,“&”符号具有更高的优先级。“&”符号如同数学中的乘法符号“×”,而“|”符号则如同数学中的加法符号“+”。 ^35433566-190-492-577
    • ⏱ 2021-12-19 16:16:52

6.6.1 映射对象类型声明

  • 📌 映射对象类型的核心是它能够遍历类型K的所有类型成员,并针对每一个成员P都将它映射为类型T。 ^35433566-196-895-940
    • ⏱ 2021-12-19 16:32:21

6.9 类型查询

  • 📌 typeof是JavaScript语言中的一个一元运算符,它能够获取操作数的数据类型。 ^35433566-221-446-489
    • ⏱ 2021-12-19 17:21:23

6.10.5 !类型断言

  • 📌 非空类型断言运算符“!”是TypeScript特有的类型运算符,它是非空类型断言的一部分。 ^35433566-227-450-495
    • ⏱ 2021-12-19 17:25:46

6.11.1 类型守卫

  • 📌 instanceof运算符能够检测实例对象与构造函数之间的关系。 ^35433566-229-3006-3038

    • ⏱ 2021-12-19 17:28:16
  • 📌 in运算符是JavaScript中的关系运算符之一,用来判断对象自身或其原型链中是否存在给定的属性,若存在则返回true,否则返回false。 ^35433566-229-3951-4022

    • ⏱ 2021-12-19 17:29:24

7.5.2 导出命名空间内的声明

  • 📌 默认情况下,在命名空间内部的声明只允许在该命名空间内部使用,在命名空间之外访问命名空间内部的声明会产生错误。 ^35433566-254-454-508
    • ⏱ 2021-12-19 17:41:05

7.6.2 ECMAScript模块

  • 📌 若一个TypeScript文件中带有顶层的import或export语句,那么该文件就是一个模块,术语为“Module”。若一个TypeScript文件中既不包含import语句,也不包含export语句,那么该文件称作脚本,术语为“Script”。脚本中的代码全部是全局代码,它直接存在于全局作用域中。因此,模块中的代码能够访问脚本中的代码,因为在模块作用域中能够访问外层的全局作用域。 ^35433566-260-787-981
    • ⏱ 2021-12-19 17:51:16

7.6.4 模块导入

  • 📌 空导入语句不会导入任何模块导出,它只是执行模块内的代码。 ^35433566-262-3013-3041
    • ⏱ 2021-12-19 17:58:24

7.7 外部声明

  • 📌 “.d.ts”文件是类型声明文件,其中字母“d”表示“declaration”,即声明的意思。“.d.ts”文件只提供类型声明,不提供任何值,如字符串和函数实现等。因此,在编译TypeScript程序的过程中,“.d.ts”文件不会生成对应的“.js”文件。 ^35433566-267-837-992
    • ⏱ 2021-12-19 18:09:57

7.7.1 外部类型声明

  • 📌 外部类型声明通过declare关键字来定义 ^35433566-268-450-471
    • ⏱ 2021-12-19 18:11:02

7.10.5 扩充模块声明

  • 📌 此例中,“declare module ‘./a’ {}”是模块扩充语法。其中,“‘./a’”表示要扩充的模块名,它与第一行模块导入语句中的模块名一致。 ^35433566-290-1074-1150
    • ⏱ 2021-12-19 19:59:55

7.10.6 扩充全局声明

  • 📌 与模块扩充类似,TypeScript还提供了全局对象扩充语法“declare global {}”。 ^35433566-291-451-501

    • ⏱ 2021-12-19 20:01:32
  • 📌 第1行,我们使用了“export {}”空导出语句,这是因为全局对象扩充语句必须在模块或外部模块声明中使用,当我们添加了空导出语句后,该文件就成了一个模块。 ^35433566-291-816-894

    • ⏱ 2021-12-19 20:02:01

8.5.3 JSDoc与类型

  • 📌 通过“@typedef”标签创建的自定义类型等同于TypeScript中的类型别名。 ^35433566-316-1344-1386
    • ⏱ 2021-12-19 20:33:26

读书笔记

本书评论