class DataManager{ constructor(private data: string[]) {} getItem(index: number): string { return this.data[index] } } /** * 创建了这样一个类,传递进来一个 string类型的数组 * getItem 可以获取数组的某一项 */ // 现在的需求是不仅可以传递 string 类型,还可以是其他类型 class DataManager1<T>{ constructor(private data: T[]) {} getItem(index: number): T { return this.data[index] } } const data = new DataManager1<number>([1,2,3]) data.getItem(0); // 要求 T 里面必须有一个 Name 属性 interface Item{ name: string } class DataManager2<T extends Item>{ constructor(private data: T[]) { } getItem(index: number): string{ return this.data[index].name } } const data2 = new DataManager2([{ name: '111' }]) // 目前 T 可以是任何类型,现在要求这个 T 只能是 string 类型或者 number 类型 class DataManager3<T extends number | string>{ constructor(private data: T[]) {} getItem(index: number): T { return this.data[index] } } const data3 = new DataManager3<string>(['1', '2'])