在 TypeScript 中,泛型(Generics)是语言内置的功能,不需要额外下载或安装任何东西;泛型(Generics)允许你创建可重用的组件,这些组件可以支持多种类型。现在给出的两个例子展示了不同的用法:
1.直接使用具体类型(非泛型用法)
`let booleans: Arrayboolean = [true, false];`
这里你明确指定了数组元素必须是 boolean 类型,这不是泛型的使用,而是类型注解。
2.使用泛型参数(需要正确定义)
`let booleans: Arrayt = [true, false]; // 错误!T 未定义`
这样写会报错,因为 T 没有被定义。正确的泛型定义应该是:
方式一:在变量声明时定义泛型
```
let booleans: t(arg: T[]) => T[] = functiont(arr: T[]): T[] {
return arr;
};
booleans([true, false]); // T 被推断为 boolean
```
方式二:定义泛型函数
```
function createArrayt(items: T[]): T[] {
return items;
}let booleanArray = createArray([true, false]); // T 被推断为 boolean
let numberArray = createArray([1, 2, 3]); // T 被推断为 number
```
还有:
// 直接使用,不需要 import
```
function identityt(arg: T): T {
return arg;
}
const output = identitystring("hello"); // T 被显式指定为 string
const inferred = identity(123); // T 自动推断为 number
```
方式三:定义泛型接口
```
interface GenericArrayt {
items: T[];
}const myBooleans: GenericArrayboolean = {
items: [true, false]
};
```
方式四:定义泛型类
```
class GenericArrayt {
constructor(public items: T[]) {}
}const booleanArray = new GenericArray([true, false]);
const numberArray = new GenericArray([1, 2, 3]);
```
关键区别:
示例:
```
let booleans: Array<boolean> = [true, false];
let booleans: Array<T> = [true, false];booleant
```
Array<boolean> 是直接使用具体类型
Array<T> 是泛型用法,但需要在使用前定义 T 的类型参数
泛型允许代码更灵活,可以处理多种类型而不失类型安全
如果你只是想定义一个布尔数组,第一种方式 Array<boolean> 就足够了。如果你需要编写可重用的泛型代码,才需要使用 T 这样的类型参数。