深入浅出TypeScript | 青训营

为什么要学习TypeScript


TS 基础


变量类型

  1. boolean、number(整数,浮点数,负数)、string
  2. 枚举enum 成员名到成员映射
  3. any、unknown、void (unknown只允许被赋值,当进行反向赋值得时候,只能赋值给any或unknown,会更安全些)
  4. never 永远不存在值的类型
  5. 数组类型【】
  6. 元组类型tuple

函数类型

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

接口

  1. 定义:为了定义对象类型

  2. 特点:

    • 可选属性
    • 只读属性
    • 描述函数类型
    • 描述自定义属性

类 ------ 与java相似

定义:写法和JS差不多,增加了一些定义

特点:

  • 增加了public、private、protected 修饰符

  • 抽象类:

    • 只能被继承,不能被实例化
    • 作为基类,抽象方法必须被子类实现
  • interface 约束类,使用implements关键字

TS高阶-高级类型


  1. 联合类型 |
ts 复制代码
let num:number | string

num = 8
num = 'eight'
  1. 交叉类型 & (eg:其他属性的扩展
ts 复制代码
interface Person{
	name:string
	age:number
}

type Student = Person & {grade:number}

const stu:Student
stu.age/grade/name
  1. 类型断言 (非空断言 和 确定具体值的断言)
ts 复制代码
function getLength(arg : number | string): number{
	return arg.length
}

function getLength(arg : number | string): number{
	const str = arg as string
	if(str.length){
		return str.length
	}else{
		const number=arg as number
		return number.toStirng().length
	}
}
  1. 类型别名 (类似interface)

    • 定义:给类型起个别名

    • 相同点:

      • 都可以定义对象或函数
      • 都允许继承
    • 差异点:

      • interface 是 TS 用来定义对象,type是用来定义别名方便使用
      • type 可以定义基本类型 , interface 不行
      • interface 可以合并重复声明,type不行
    • 一般使用组合或交叉类型的人来说,用type

TS进阶-泛型


  1. 泛型创建可重用的组件

  2. 应用场景:定义一个功能,把传入的参数打印出来。传入string,返回string,若想支持number。若想打印数组任意类型?

    ts 复制代码
    function print(arg:string):stirng {
    	console.log(arg)
    	return arg;
    }
    
    function print(arg:string | number ):string | number{
    	console.log(arg)
    	return arg;
    }
    function print(arg:any):any{
    	console.log(arg)
    	return arg
    }
    function print<T> (arg:T):T {
    	console.log(arg)
    	return arg
    }
  3. 基本定义

    1. 语法就是<>写参数类型,用T表示
    2. 有两种:定义要使用的类型 + TS类型推断,自动推导类型
    3. 泛型的作用是临时占位
    ts 复制代码
    function print<T> (arg:T):T {
    	console.log(arg)
    	return arg
    }

TS进阶-泛型工具类型-基础操作符


  1. typeof : 获取类型
  2. keyof:获取所有健
  3. in : 遍历枚举类型
ts 复制代码
type Keys = "a" | "b" | "c"
type Obj = {
	[p in Keys]:any
}
  1. T【k】:索引访问
ts 复制代码
interface IPeson { 
	name:string;
	age:number;
}
let type1 : IPerson['name']
let type2 : IPerson['age']
  1. extends:泛型约束
ts 复制代码
interface Lengthwise { 
	length : number;
}
function loggingIdentity<T extends Lengthwise>(arg : T): T {
	console.log(arg.length);
	return arg;
}

loggingIdentity({value:3})
loggingIdentity({length:5})

TS进阶-泛型工具类型-常用工具类型

实战


  1. declare:三方库需要类型声明文件
  2. .d.ts:声明文件定义
  3. @types:三方库TS类型包
  4. tsconfig.json:定义TS的配置

实战-泛型约束后端接口类型


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:'good'
})
相关推荐
一介俗子8 小时前
TypeScript 中 extends 关键字
typescript
mez_Blog10 小时前
个人小结(2.0)
前端·javascript·vue.js·学习·typescript
QGC二次开发12 小时前
Vue3 : Pinia的性质与作用
前端·javascript·vue.js·typescript·前端框架·vue
2301_8010741515 小时前
TypeScript异常处理
前端·javascript·typescript
下雪天的夏风17 小时前
TS - tsconfig.json 和 tsconfig.node.json 的关系,如何在TS 中使用 JS 不报错
前端·javascript·typescript
天下无贼!1 天前
2024年最新版TypeScript学习笔记——泛型、接口、枚举、自定义类型等知识点
前端·javascript·vue.js·笔记·学习·typescript·html
Jorah3 天前
1. TypeScript基本语法
javascript·ubuntu·typescript
小白小白从不日白4 天前
TS axios封装
前端·typescript
aimmon5 天前
Superset二次开发之源码DependencyList.tsx 分析
前端·typescript·二次开发·bi·superset
下雪天的夏风5 天前
Vant 按需引入导致 Typescript,eslint 报错问题
前端·typescript·eslint