ts中的泛型
作为一个前端人员,写js习惯了,加上Ts后就很难搞懂泛型
一、函数签名:泛型函数中的函数签名是不是代表着指定函数的返回数据类型
是的,泛型函数中的函数签名指定了函数的参数类型和返回值类型,使用泛型可以在函数定义时不指定具体的类型,而在调用函数时根据实际情况确定具体的类型,从而增加了编程的灵活性和代码的复用性。函数签名中的泛型参数可以代表任意的类型,在编译时会根据参数实际类型的推断来确定具体的返回数据类型。(大概就是起到类型推断的作用)
二、
function add<type>(value: type): type{ return value }中的第二个type是否代表入参类型
是的,第二个type代表入参类型。这是一种泛型函数的写法,其中的<type>
表示一个泛型类型参数,可以在函数定义中使用。在函数签名中,第一个type
用于标识返回值类型,而在括号中的value: type
用于标识入参类型。因此,在这个函数中,value
的类型将会与传入的value
参数的类型相同。
三、
ts中会有那种函数需要使用泛型去定义函数,最少5个代码示例
1. Map 函数: 用于将一个数组的元素映射到另一个数组中,可以使用泛型来定义输入和输出的类型。
function map<T, U>(arr: T[], callback: (item: T) => U): U[] {
return arr.map(callback);
}
const numbers = [1, 2, 3, 4, 5];
const squaredNumbers = map(numbers, (x) => x * x);
console.log(squaredNumbers); // [1, 4, 9, 16, 25]
2. Filter 函数: 用于根据指定条件筛选数组的元素,也可以使用泛型来定义输入和输出的类型。
function filter<T>(arr: T[], callback: (item: T) => boolean): T[] {
return arr.filter(callback);
}
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = filter(numbers, (x) => x % 2 === 0);
console.log(evenNumbers); // [2, 4]
3. Reduce 函数: 用于按照指定规则将数组元素进行累积操作,同样可以使用泛型定义输入和输出的类型。
function reduce<T, U>(arr: T[], callback: (accumulator: U, item: T) => U, initialValue: U): U {
return arr.reduce(callback, initialValue);
}
const numbers = [1, 2, 3, 4, 5];
const sum = reduce(numbers, (acc, x) => acc + x, 0);
console.log(sum); // 15
4. Promise 包装器: 在处理异步操作时,经常需要使用 Promise 作为返回值。可以使用泛型来定义 Promise 的 resolve 值的类型。
function asyncOperation<T>(value: T): Promise<T> {
return new Promise((resolve) => {
setTimeout(() => resolve(value), 1000);
});
}
asyncOperation("Hello")
.then((result) => console.log(result)); // "Hello" after 1 second
5. Array 类的映射方法: TypeScript 中的 Array 类提供了一些映射数组的方法,比如 map
, filter
等。这些方法都可以使用泛型定义输入和输出的类型。
const numbers = [1, 2, 3, 4, 5];
const squaredNumbers = numbers.map((x) => x * x);
console.log(squaredNumbers); // [1, 4, 9, 16, 25]
以上是几个常见的需要使用泛型去定义函数的示例,通过泛型可以增加函数的灵活性,并可以在编译时进行类型检查,提高代码的可靠性
上一篇: TS 泛型