深入浅出Typescript | 青训营笔记

93 阅读5分钟

745873716798849765.jpg

课程大纲:

1. 为什么要学习TS

2. TS基础

3. TS进阶

4. 实战&工程向

一、为什么要学习TS?

① TypeScript VS JavaScript

505975416016655609.jpg

② TS带来了什么

807195015261589401.jpg

③ TS推荐

Awesome Typescript:TS开源教程及应用.

Typescript Playground:TS到JS在线翻译.

二、TS基础

① TS基础——基础类型

  1. Boolean,number,string
  2. undefined,null
  3. any,unknown,void
  4. never
  5. 数组类型[]
  6. 元组类型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基础——函数类型

  1. 定义:TS定义函数类型时要定义输入参数类型和输出类型
  2. 输入参数:参数支持可选参数和默认参数
  3. 输出参数:输出可以自动判断,没有返回值,默认为void类型。
  4. 函数重载:名称相同但参数不同,可以通过重载支持多种类型。

③ TS基础——interface

  1. 定义:接口是为了定义对象类型。
  2. 特点:
  • 可选属性:?
  • 只读属性:readonly
  • 可以描述函数类型
  • 可以描述自定义属性

3.总结:接口非常灵活duck typing

372594930363121910.jpg

④ 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进阶

① 高级类型

  1. 联合类型 |
  2. 交叉类型 &
  3. 类型断言
  4. 类型别名(type VS interface)
  • 定义:给类型起个别名
  • 相同点: 1.都可以定义对象函数 2.都允许继承
  • 差异点:
  1. interface是TS用来定义对象,type是用来定义别名方便使用;
  2. type可以定义基本类型,interface不行;
  3. interface可以合并重复声明,type不行。

762933070869678515.jpg

② 泛型——什么时候需要泛型?

1.官方定义:

  • 软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型。 这在创建大型系统时为你提供了十分灵活的功能。

  • 在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件, 一个组件可以支持多种类型的数据。这样用户就可以以自己的数据类型来使用组件。

2.应用场景:

  • 定义一个print函数,这个函数的功能是把传入的参数打印出来, 再返回这个参数,传入参数的类型是string函数返回类型为string。

  • 想支持打印number类型?

  • 想支持打印数组类型?任意类型?

  • 思考:需要有一个类型解决输入输出可关联的问题

391466090465328800.jpg

3.基本使用

基本定义:

  • 泛型的语法是>里面写类型参数,一般用T表示;
  • 使用时有两种方法指定类型;
    1. 定义要使用的类型 2.通过TS类型推断,自动推导类型
  • 泛型的作用是临时占位,之后通过传来的类型进行推导;

675787965416091967.jpg

4.基础操作符

  • typeof:获取类型
  • keyof:获取所有键
  • in:遍历枚举类型
  • T[K]:索引访问
  • extends:泛型约束

896184989584426079.jpg

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: 1comment:"非常棒!"
    })

396539087352795861.jpg

五、课程总结

1.为什么学TS?

  • TS是JS的超集,增强了类型安全,提高生产力

2.TS基础:

  • 基础类型,函数类型,interface,Class类型
  1. TS实战:
  • 声明文件,后端接口约束

此外作者认为必须掌握的TS知识点如下:

Typescript是一种静态类型语言,它建立在JavaScript语言之上,并向其添加了更多的功能和类型检查。以下是Typescript必须掌握的一些知识点:

  1. 类型系统:Typescript的核心是类型系统,它允许开发人员在编写代码时指定每个变量和函数的数据类型。这有助于减少类型错误,提高代码质量和可维护性。

  2. 接口:接口是定义对象类型和函数签名的一种方式,它可用于强制实现特定类型的对象描述。

  3. 类:类是一种面向对象的编程方式,它允许开发人员定义具有相同属性和方法的对象类型。类有助于提高代码重用性、可维护性和可测试性。

  4. 泛型:泛型是一种允许开发人员编写具有可重用代码片段的类型的方法。泛型可用于编写可重用、通用的函数和类型。

  5. 枚举:枚举是一种用于定义命名常量的方式,它让代码更加可读性。

  6. 安装和配置:TypeScript编译器需要准备和配置,这涉及到安装Node.js和TypeScript类库、配置TypeScript编译器和编写TypeScript编译选项等内容。

  7. 编辑器和调试工具:在学习和使用TypeScript时,也需要学习和掌握使用与TypeScript兼容的编辑器和调试工具,如VS Code、WebStorm等。

  • 通过掌握这些关键点,开发人员可以更加高效地使用Typescript,提高代码质量和可维护性。

以上就是本次TS笔记的所有内容了,感谢大家的阅读~

91466050809228227.jpg