TypeScript | 青训营

57 阅读3分钟

1.使用实例

这是对接口数据的类型处理

// 该类文件专门用于定义数据类型 // 定义首页模块ts数据类型

// 接口返回的数据中一般都存在的部分 export interface ResponseData { code: number message: string ok: boolean }

//对获取到的需要我们存储的医院数据的 ts数据类型

export interface HospotalInfo { id: string createTime: string updateTime: string isDeleted: number param: { hostypeString: string fullAddress: string } hoscode: string hosname: string hostype: string provinceCode: string cityCode: string districtCode: string address: string logoData: string intro: null route: string status: number bookingRule: { cycle: number releaseTime: string stopTime: string quitDay: number quitTime: string rule: string[] } }

// 需要我们存储的医院数据类型,数组类型, 医院的信息(所有接口返回的医院信息都是这个) export type Content = HospotalInfo[]

//获取医院数据接口返回的数据类型(完整的) 需要继承前面公有的才完整

export interface HospitalResponseData extends ResponseData { data: { content: Content pageable: { sort: { sorted: boolean unsorted: boolean empty: boolean } pageNumber: number pageSize: number offset: number paged: boolean unpaged: boolean } totalPages: number totalElements: number last: boolean first: boolean sort: { sorted: boolean unsorted: boolean empty: boolean } numberOfElements: number size: number number: number empty: boolean } }

2.探讨TypeScript中的泛型的使用方法和场景,以及如何使用类型约束来增加代码的灵活性和安全性

TypeScript中的泛型是一种强大的工具,允许我们创建可重用的代码组件,适用于不同类型的数据。泛型的使用方法是定义一个通用的类型占位符,在函数或类中使用,并在调用时传入特定的类型。这样可以大大提高代码的灵活性和可重用性,减少冗余代码的编写和维护。

泛型的场景包括,但不限于以下几种:

  1. 在函数中使用泛型来处理不同类型的参数

例如,我们希望编写一个函数,来查找数组中的某个元素是否存在。这个函数应该能处理不同类型的数组和查找元素,方便我们重复利用这个函数。使用泛型,可以定义一个通用的类型占位符来表示数组元素的类型,并在函数中使用。

示例代码:

function findIndex<T>(array: T[], target: T): number {
  for (let i = 0; i < array.length; i++) {
    if (array[i] === target) {
      return i;
    }
  }
  return -1;
}
  1. 在类中使用泛型来处理不同类型的属性

例如,我们希望编写一个可重用的堆栈类,适用于不同类型的数据。使用泛型,可以定义一个通用的类型占位符来表示堆栈中的元素类型,并在类中使用。

示例代码:

class Stack<T> {
  private items: T[] = [];

  public push(item: T) {
    this.items.push(item);
  }

  public pop(): T | undefined {
    return this.items.pop();
  }
}
  1. 在接口中使用泛型来定义通用的结构

例如,我们希望定义一个通用的接口来表示一些数据,这些数据可能包含不同类型的属性。使用泛型,可以定义一个通用的类型占位符来表示属性的类型,并在接口中使用。

示例代码:

interface Data<T> {
  [key: string]: T;
}

const person: Data<string> = {
  name: 'Alice',
  age: '31',
};

除了以上场景外,泛型还可以用于处理异步流程、函数回调等复杂的场景。

在泛型代码中,使用类型约束能够增加代码的灵活性和安全性。类型约束可以帮助我们明确泛型参数的类型范围,以避免一些潜在的错误和异常情况。

示例代码:

interface Length {
  length: number;
}

function identity<T extends Length>(arg: T): T {
  console.log(arg.length);
  return arg;
}

在上面的例子中,使用extends关键字来限制泛型参数的类型范围,必须是实现了Length接口的类型。这样一来,在使用arg时就可以放心大胆地调用length属性,因为已经明确了arg的类型。

综上所述,泛型是TypeScript中的一个强大的工具,能够增加代码的灵活性和可维护性。在使用泛型时,使用类型约束能够提高代码的安全性和可读性。