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中的泛型是一种强大的工具,允许我们创建可重用的代码组件,适用于不同类型的数据。泛型的使用方法是定义一个通用的类型占位符,在函数或类中使用,并在调用时传入特定的类型。这样可以大大提高代码的灵活性和可重用性,减少冗余代码的编写和维护。
泛型的场景包括,但不限于以下几种:
- 在函数中使用泛型来处理不同类型的参数
例如,我们希望编写一个函数,来查找数组中的某个元素是否存在。这个函数应该能处理不同类型的数组和查找元素,方便我们重复利用这个函数。使用泛型,可以定义一个通用的类型占位符来表示数组元素的类型,并在函数中使用。
示例代码:
function findIndex<T>(array: T[], target: T): number {
for (let i = 0; i < array.length; i++) {
if (array[i] === target) {
return i;
}
}
return -1;
}
- 在类中使用泛型来处理不同类型的属性
例如,我们希望编写一个可重用的堆栈类,适用于不同类型的数据。使用泛型,可以定义一个通用的类型占位符来表示堆栈中的元素类型,并在类中使用。
示例代码:
class Stack<T> {
private items: T[] = [];
public push(item: T) {
this.items.push(item);
}
public pop(): T | undefined {
return this.items.pop();
}
}
- 在接口中使用泛型来定义通用的结构
例如,我们希望定义一个通用的接口来表示一些数据,这些数据可能包含不同类型的属性。使用泛型,可以定义一个通用的类型占位符来表示属性的类型,并在接口中使用。
示例代码:
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中的一个强大的工具,能够增加代码的灵活性和可维护性。在使用泛型时,使用类型约束能够提高代码的安全性和可读性。