聊一聊TypeScript中的泛型与断言~

文章讲述了在TypeScript中如何使用interface定义接口来约束对象的数据类型,包括接口断言、类型断言、非空断言的概念。同时,介绍了泛型在处理后端接口返回的不确定数据结构时的应用,以及泛型函数的定义和使用。
摘要由CSDN通过智能技术生成

思考:后端接口给前端返回数据时,一般会遵循一定的规律,例如:都有code, msg, data三个属性,而不同的接口返回的具体数据保存在data中,它的格式是不同的。

随便定义一个数据

// 请求得到用户信息
const res1 = {
    code: 200, msg: 'success',
    data: {
        name: 'jack', age: 18
    }
}

这种情况怎么注解呢?这个时候就延伸了三个概念interface-接口 断言 泛型

interface-接口

作用: 用interface来描述对象数据的类型(常用于给对象的属性和方法添加类型约束)

// 请求得到用户信息
interface data {
    code: number,
    msg: string,
    data: {
        name: string,
        age: number
    }
}

一旦注解接口类型之后对象的属性和方法类型都需要满足要求,属性不能多也不能少

同样,某些数据是没有的,也可以用之前讲过的 ?可选操作符

类型断言

const myVariable: any = 'Hello World';
const length: number = (myVariable as string).length; // 使用 as 关键字将 myVariable 断言为 string 类型

console.log(length); // 11

在上述示例中,myVariable 被声明为 any 类型,这意味着它可以是任意类型的值。然而,在实际编码中,我们可能会明确地知道它是一个字符串类型。通过使用 as 关键字,我们将 myVariable 断言为 string 类型,以便在后续的代码中使用字符串的特定方法和属性。

type Res = {
    total: number,
    list: object[]
}

// 我们确定当ajax数据回来之后,result的数据就是上面的Res格式
// 但是,它的初值为 {} 会报错
const result:Res = {}

这个时候可以通过使用 as Res 将空对象 {} 断言为 Res 类型
const result: Res = {} as Res

非空断言

在这里插入图片描述
当遇到这种情况时,你明确知道它是有值的,就可以使用非空断言 !
const aLink = document.getElementById('link')!
大白话讲就是我担保它是有值的

泛型

后端接口给前端返回数据时,一般会遵循一定的规律,例如:都有code, msg, data三个属性,而不同的接口返回的具体数据保存在data中,它的格式是不同的。怎么处理?

interface Res1  {
  code: number,
  msg: string,
  data: {
    name: string,
    age: number
  }
}

泛型别名
语法:在接口类型的名称后面使用即可声明一个泛型参数列表,接口里的其他成员都能使用该参数的类型。

// interface 用来定义对象的形状或类的契约的,使用{}描述
interface ref<T> {
	name:string,
	age:'string'
	data:T
}

//type 是用 = 号来定义类型别名的,它可以为任何类型创建一个别名
type ref<T> = {
	name:string,
	age:'string'
	data:T
}

const res:ref<{name:number,goodsName:string}> = {
    name: 'hh',
    age: '18',
    data: {
        id: 1001,
        goodsName: '衬衫'
    }
}

泛型-函数

语法:在函数名称的后面使用即可声明泛型参数,整个函数中(参数、返回值、函数体)的变量都可以使用该参数的类型
在这里插入图片描述

function printArray<T>(arr: T[]): void {
  for (let item of arr) {
    console.log(item);
  }
}

// 使用泛型函数
const numbers: number[] = [1, 2, 3, 4, 5];
const strings: string[] = ['hello', 'world'];

printArray(numbers); // 打印数组中的数字
// 输出:
// 1
// 2
// 3
// 4
// 5

printArray(strings); // 打印数组中的字符串
// 输出:
// hello
// world

上述示例定义了一个名为 printArray 的泛型函数。它接受一个类型为 T[] 的参数 arr,其中 T 是一个类型变量。使用 T[] 表示泛型数组类型,即可以接受不同类型的数组作为参数
在调用 printArray 函数时,我们可以传入不同类型的数组,这样可以使我们的代码更加通用和灵活。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值