TypeScript 中的泛型可以帮助我们编写更加灵活和可复用的代码,它可以在函数、接口、类等语法结构中使用。下面是一个基本的泛型示例:
function identity<T>(arg: T): T {
return arg;
}
let result = identity('Hello, TypeScripy'); // result 是 string 类型
在上面的例子中,我们使用了函数泛型,定义了一个名为 identity
的函数。该函数接受一个参数 arg
,类型为泛型 T
,并返回该参数。在函数名后面的尖括号中声明了泛型类型 T
。
在函数调用时,可以使用尖括号传入具体的类型值,也可以让 TypeScript 自动推断出类型。例如,上面的调用中,参数为字符串,TypeScript 会自动将 result
推断为 string
类型。
除了函数中,泛型还可以在接口、类等语法结构中使用。例如:
interface List<T> {
data: T[];
add(item: T): void;
remove(item: T): void;
get(index: number): T | undefined;
}
class MyList<T> implements List<T> {
data: T[] = [];
add(item: T): void {
this.data.push(item);
}
remove(item: T): void {
let index = this.data.indexOf(item);
if (index !== -1) {
this.data.splice(index, 1);
}
}
get(index: number): T | undefined {
return this.data[index];
}
}
const myList = new MyList<string>();
myList.add('apple');
myList.add('banana');
console.log(myList.get(0)); // 'apple'
上面的代码中,我们定义了一个 List
接口,它表示一个可添加、删除并访问指定位置元素的列表类型,其中元素类型使用泛型 T
定义。
接下来,我们使用泛型 T
来实现了一个名为 MyList
的类,该类实现了 List
接口,并使用 data
数组来存储元素数据,并实现 add
、remove
、get
方法。
最后,我们使用 new
关键字创建了一个 MyList<string>
类型的实例,并分别添加了两个元素 ‘apple’ 和 ‘banana’。
在使用泛型时,我们可以使用不同的类型值来实现不同的需求,帮助我们编写更加灵活和可复用的代码。