这是参加第六届青训营第三次笔记,以下是
课程纲要以及知识要点,以及一丢丢自己的理解。简单的记录一下,方便后面回头复盘。复盘再深入更新思考吧。至于我说的东西可能不对,但不喜勿喷。如果,愿意帮忙纠正,还是很欢迎的。
一、为什么要学TS
1. TypeScript VS JavaScript
- TypeScript 是 JavaScript的超集,用于解决大型项目的代码复杂性。
- TS是强类型,支持静态和动态的类型
- TS可以在编译期间发现并纠正错误
- TS不允许改变变量的数据类型
- JavaScript是一种脚本语言,用于创建动态网页。
- JS是动态弱类型语言
- JS只能在运行时发现错误
- JS变量可以被赋值成不同类型
2. TypeScript带来了什么
- 类型安全
- 下一代JS特性
- 完善的工具链 不仅仅是一门语言,更是生产力工具。
3. TypeScript推荐
- Awesome Typescript: TS开源教程及应用
- ByteTech:TS&React:React+TypeScript开发模式介绍
- Typescript Playground:TS到JS在线编译
二、TS基础
1. TS基础类型
- boolean、number、string
- 枚举enum
- any、unknown、void
- never
- 数组类型[]
- 元组类型 tuple
2. TS函数类型
- 定义:TS定义函数类型时要定义输入参数类型和输出类型。
- 输入参数:参数支持可选参数和默认参数
- 输出参数:输出可以自动推断,没有返回值时,默认为void类型
- 函数重载:名称相同但参数不同,可以通过重载支持多种类型
3. TS的interface
- 定义:接口是为了定义对象类型
- 特点:可选属性?、只读属性readonly、可以描述函数类型、可以描述自定义属性
- 总结:接口非常灵活duck typing
4. TS的类(class)
- 定义:写法和JS差不多,增加了一些定义。
- 特点: 增加了public、private、protected修饰符、 抽象类:只能被继承,不能被实例化、作为基类,抽象方法必须被子类实现。、 interface约束类,使用implements关键字
三、TS的进阶
1. TS高级类型
- 联合类型 |
- 交叉类型 &
- 类型断言 as + 类型
- 类型别名(type vs interface) 定义:给类型起个别名、 相同点:都可以定义对象或函数、都允许继承 差异点:interface是TS用来定义对象,type是用来定义别名方便使用;type可以定义基本类型,interface不行;interface可以合并重复声明,type不行。
2. TS的泛型(什么时候需要泛型)
- 基本定义:
泛型的语法是<>里面写类型参数,一般用T表示;
使用时有两种方法指定类型:
- 定义要使用的类型;
- 通过TS类型推断,自动推导类型。
泛型的作用是临时占位,之后通过传来的类型进行推导。
3. TS泛型工具类型-基础操作符
- typeof 获取类型
- keyof 获取所有键
- in 遍历枚举类型
- T[K] 索引访问
- extends 泛型约束
4. TS泛型工具类型-常用工具类型
- Partial 将类型属性变为可选
- Required 将类型属性变为必选
- Readonly 将类型属性变为只读
- Pick、Record……
四、TypeScript 实战
1. TS声明文件
- declare 三方库需要类型声明文件
- .d.ts 声明文件定义
- @types 三方库TS类型包
- tsconfig.json 定义TS的配置
2. TS泛型约束后端接口类型
import axios from 'axios'
interface API{
"/book/detail": {
id: number
},
"/book/comment": {
id: number,
comment: string
}
}
function request<T extends keyof API>(url: T,obj: API[T]){
return axios.post(url, obj)
}
request( ' /book/comment', {
id: 1,
comment:‘非常棒! '
}
学习建议以及总结:对于初学来说,先把基础过一遍,然后先用起来。
边用边学很深刻,我认为直接学的很深入很枯燥,用过来才有自己理解,带着自己的理解再去学效果更好。
学习就是一个反反复复的过程。
对于我个人来说,里面大部分基础的东西都用过了也有一些没用过的。但是,自己对这些东西没有很明显的感觉。所以,我来再学学,一定要记得复盘才行。
不要急,慢慢来。