TS初体验 | 青训营笔记

137 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天。

本篇笔记是对今天青训营的TS课程的归纳总结及个人感悟。

与课程内容保持一致,本篇笔记以TS的基础语法和高级类型为主要内容。

一. TypeScript 历史及定义解析

最早在2012年由微软发布第一个版本,一直不断更新到现在。

Ts源于js,但js是动态类型、弱类型语言(执行时才做编译),ts为静态类型、弱类型语言(提前做编译,类似于python/java)。

  • 所谓静态、动态类型:编译发生在执行时还是执行前。
  • 所谓弱类型语言:允许变量类型隐式转换,允许强制类型转换。

二. TypeScript 优势解读

1. 静态类型:
  • 可读性增强→基于语法解析TSDoc
  • 可维护性增→编译阶段暴露大部分错误
  • 多人合作的大型项目中,有更好的稳定性和开发效率
2. JS的超集:
  • 包含所有的js特性,支持渐进式引入

三,js如何改造成ts (基础语法介绍)

1. 基础数据类型

举个例子

Const q = ‘string’; → const q: string = ‘string’;

2. 对象数据类型

  • 大写I表示是类型,用于区分

  • 只读属性(例如id),在前加readonly

  • 可选属性(可有可无),在:前加?

  • 任意属性,[ ]进行定义key

3. 函数类型

  • 直接补充参数类型

  • 采用interface

4. 数组类型

  • 类型+方括号表示

  • 泛型表示

  • 元祖表示,用 [ ]

  • 接口表示Interface

四,TS高级数据类型

1. 联合交叉类型:

现提出一个需求,为一些书籍列表编写类型,不同的书籍通过type来区分

你会怎么做? 直接写成object类型? 是不是类型声明繁琐,存在较多重复?

  • 联合类型:|A |B ;联合类型表示一个值可以是几种类型之一。
  • 交叉类型:|A & |B; 多种类型叠加到一起成为一种类型,它包含了所需要的所有类型的特性。

2. 类型保护与类型守卫

类型保护: 访问联合类型时,处于程序安全,仅能访问联合类型中的集中部分。

类型守卫: 定义一个函数,它的返回值是一个类型谓词,生效范围为子作用域