乐闻世界logo
搜索文章和话题

How do you declare a generic type in TypeScript?

1 个月前提问
1 个月前修改
浏览次数15

1个答案

1

在TypeScript中,泛型是一种工具,它允许在定义函数、接口、或类的时候不具体指定它们将要操作的具体类型。这样,我们可以保持代码的灵活性和可重用性。

泛型的声明方式:

1. 泛型函数

泛型可以应用在函数上,例如,如果我们想编写一个函数,该函数可以接受数组,并返回数组中的第一个元素,我们可以这样写:

typescript
function getFirstElement<T>(arr: T[]): T { return arr[0]; } // 使用例子 let numbers = [1, 2, 3]; let firstNumber = getFirstElement(numbers); // 类型自动推断为 number let strings = ["apple", "banana"]; let firstString = getFirstElement(strings); // 类型自动推断为 string

在这个例子中,<T>是一个泛型标记,表示该函数是泛型的。T 可以由调用函数时传入的参数自动推断其类型。

2. 泛型接口

泛型也可以定义在接口上,使得接口中的某些属性或方法可以支持多种类型:

typescript
interface KeyValuePair<K, V> { key: K; value: V; } // 使用泛型接口 let item: KeyValuePair<number, string> = { key: 1, value: "Apple" };

在这个例子中,接口KeyValuePair有两个类型变量KV,分别代表键和值的类型。通过指定<number, string>,我们创建了一个键为number类型、值为string类型的对象。

3. 泛型类

泛型同样可以应用于类,使类在处理不同数据类型时更加灵活:

typescript
class Stack<T> { private elements: T[] = []; push(element: T) { this.elements.push(element); } pop(): T | undefined { return this.elements.pop(); } } // 使用泛型类 let numberStack = new Stack<number>(); numberStack.push(10); numberStack.push(20); console.log(numberStack.pop()); // 输出:20 let stringStack = new Stack<string>(); stringStack.push("Hello"); stringStack.push("World"); console.log(stringStack.pop()); // 输出:"World"

在这个例子中,Stack类使用泛型T来代表栈中存储的元素类型。这样,我们可以创建一个特定类型(如numberstring)的栈。

通过使用泛型,我们的TypeScript代码变得更加灵活和可重用,同时还能保持类型的完整性和安全性。

2024年8月4日 22:53 回复

你的答案