课程大纲:
1. 为什么要学习TS
2. TS基础
3. TS进阶
4. 实战&工程向
一、为什么要学习TS?
① TypeScript VS JavaScript
② TS带来了什么
③ TS推荐
Awesome Typescript:TS开源教程及应用.
Typescript Playground:TS到JS在线翻译.
二、TS基础
① TS基础——基础类型
- Boolean,number,string
- undefined,null
- any,unknown,void
- never
- 数组类型[]
- 元组类型tuple
function test(x:string | number):boolean{
if(typeof x ==='string'){
return true;
} else if(typeof x ==='number'){
return false;
}
return throwError('参数格式不对');
}
function throwErrormessage:string):never{
throw new Error(message);
}
② TS基础——函数类型
- 定义:TS定义函数类型时要定义输入参数类型和输出类型
- 输入参数:参数支持可选参数和默认参数
- 输出参数:输出可以自动判断,没有返回值,默认为void类型。
- 函数重载:名称相同但参数不同,可以通过重载支持多种类型。
③ TS基础——interface
- 定义:接口是为了定义对象类型。
- 特点:
- 可选属性:?
- 只读属性:readonly
- 可以描述函数类型
- 可以描述自定义属性
3.总结:接口非常灵活duck typing
④ TS基础——类
定义:写法和JS差不多,增加了一些定义 特点:
- 增加了public,private,protected修饰符
- 抽象类:
- 只能被继承,不能被实例化。
- 作为基类,抽象方法必须被子类实现。
- interface约束类,使用implements关键字
class Person {
protected name: string
private sex:string
public constructor(name:string){
this.name=name
this.sex='male'
}
}
class Student extends Person {
study() {
console.log(this.name);
console.log(this.sex);//Property'sex' private and only accessible within class'Person'.}
}
let person = new Person("daming");
person.name//Propertyname’ is protected and only accessible within class'Person and its subclasses person.sex//Property'sex’ is private and only accessible within class'Person.
```js
abstract class Animal {
constructor(name:string){
this.name=name
}
public name: string
public abstract sayHi():void
)
class Dog extends Animal {
constructor(name:string){
super(name)
}
}
三、TS进阶
① 高级类型
- 联合类型 |
- 交叉类型 &
- 类型断言
- 类型别名(type VS interface)
- 定义:给类型起个别名
- 相同点: 1.都可以定义对象函数 2.都允许继承
- 差异点:
- interface是TS用来定义对象,type是用来定义别名方便使用;
- type可以定义基本类型,interface不行;
- interface可以合并重复声明,type不行。
② 泛型——什么时候需要泛型?
1.官方定义:
软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型。 这在创建大型系统时为你提供了十分灵活的功能。
在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件, 一个组件可以支持多种类型的数据。这样用户就可以以自己的数据类型来使用组件。
2.应用场景:
定义一个print函数,这个函数的功能是把传入的参数打印出来, 再返回这个参数,传入参数的类型是string函数返回类型为string。
想支持打印number类型?
想支持打印数组类型?任意类型?
思考:需要有一个类型解决输入输出可关联的问题
3.基本使用
基本定义:
- 泛型的语法是>里面写类型参数,一般用T表示;
- 使用时有两种方法指定类型;
- 定义要使用的类型 2.通过TS类型推断,自动推导类型
- 泛型的作用是临时占位,之后通过传来的类型进行推导;
4.基础操作符
- typeof:获取类型
- keyof:获取所有键
- in:遍历枚举类型
- T[K]:索引访问
- extends:泛型约束
5.常用工具类型
- Partial:将类型属性变为可选
- Required:将类型属性变为可选
- Readonly:将类型属性变为只读
- Pick,Record...
type Partial<T> = {
[P in keyof T]?: T[P];
};
type Required<T> = {
[P in keyof T]-?: T[P]
};
type Readonly<T> = {
readonly [P in keyof T]:T[P];
};
四、TS实战
① 声明文件
- declare:三方库需要类型声明文件
- .d.ts:声明文件定义
- @types:三方库TS类型包
- tsconfig.json:定义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:"非常棒!"
})
五、课程总结
1.为什么学TS?
- TS是JS的超集,增强了类型安全,提高生产力
2.TS基础:
- 基础类型,函数类型,interface,Class类型
- TS实战:
- 声明文件,后端接口约束
此外作者认为必须掌握的TS知识点如下:
Typescript是一种静态类型语言,它建立在JavaScript语言之上,并向其添加了更多的功能和类型检查。以下是Typescript必须掌握的一些知识点:
类型系统:Typescript的核心是类型系统,它允许开发人员在编写代码时指定每个变量和函数的数据类型。这有助于减少类型错误,提高代码质量和可维护性。
接口:接口是定义对象类型和函数签名的一种方式,它可用于强制实现特定类型的对象描述。
类:类是一种面向对象的编程方式,它允许开发人员定义具有相同属性和方法的对象类型。类有助于提高代码重用性、可维护性和可测试性。
泛型:泛型是一种允许开发人员编写具有可重用代码片段的类型的方法。泛型可用于编写可重用、通用的函数和类型。
枚举:枚举是一种用于定义命名常量的方式,它让代码更加可读性。
安装和配置:TypeScript编译器需要准备和配置,这涉及到安装Node.js和TypeScript类库、配置TypeScript编译器和编写TypeScript编译选项等内容。
编辑器和调试工具:在学习和使用TypeScript时,也需要学习和掌握使用与TypeScript兼容的编辑器和调试工具,如VS Code、WebStorm等。
- 通过掌握这些关键点,开发人员可以更加高效地使用Typescript,提高代码质量和可维护性。