欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

ts中的泛型

最编程 2024-07-27 21:50:22
...

作为一个前端人员,写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 类提供了一些映射数组的方法,比如 mapfilter 等。这些方法都可以使用泛型定义输入和输出的类型。


const numbers = [1, 2, 3, 4, 5];
const squaredNumbers = numbers.map((x) => x * x);
console.log(squaredNumbers); // [1, 4, 9, 16, 25]

以上是几个常见的需要使用泛型去定义函数的示例,通过泛型可以增加函数的灵活性,并可以在编译时进行类型检查,提高代码的可靠性