CocosCreator 面试题(六)什么是泛型,有什么作用?

简介: CocosCreator 面试题(六)什么是泛型,有什么作用?

在 TypeScript 中,泛型(Generics)是一种在函数、类或接口中使用参数化类型的机制。它允许我们编写可以适用于不同类型的代码,增加代码的灵活性和可重用性。


1、泛型的作用

  • 类型安全性:使用泛型可以在编译时捕获类型错误,避免在运行时出现类型不匹配的错误。通过指定泛型类型参数,可以确保函数或类在处理数据时使用正确的类型,提高代码的可靠性和安全性。
  • 代码重用性:泛型可以使得代码更通用,可以在多个地方使用相同的逻辑,但适用于不同的数据类型。这样可以避免重复编写类似的代码,提高代码的重用性和可维护性。

下面通过几个例子来详细说明 TypeScript 中泛型的使用

(1)、泛型函数

function reverse<T>(arr: T[]): T[] {
  return arr.reverse();
}
const numbers = [1, 2, 3, 4, 5];
const strings = ['apple', 'banana', 'cherry'];
console.log(reverse(numbers)); // [5, 4, 3, 2, 1]
console.log(reverse(strings)); // ['cherry', 'banana', 'apple']

在上述例子中,我们定义了一个泛型函数 reverse,它接受一个数组 arr,并返回一个反转后的数组。通过使用泛型类型参数 T,我们可以确保输入数组和输出数组的类型一致。在调用 reverse 函数时,编译器会根据传入的实际类型推断并应用泛型参数的类型。


(2)、泛型类

class Stack<T> {
  private items: T[] = [];
  push(item: T): void {
    this.items.push(item);
  }
  pop(): T | undefined {
    return this.items.pop();
  }
}
const numberStack = new Stack<number>();
numberStack.push(1);
numberStack.push(2);
numberStack.push(3);
console.log(numberStack.pop()); // 3
const stringStack = new Stack<string>();
stringStack.push('apple');
stringStack.push('banana');
stringStack.push('cherry');
console.log(stringStack.pop()); // 'cherry'

在上述例子中,我们定义了一个泛型类 Stack,它表示一个栈数据结构。通过使用泛型类型参数 T,我们可以在实例化类时指定栈中元素的类型。这样可以确保栈中的元素类型与指定的类型一致。


(3)、泛型接口

interface Pair<T, U> {
  first: T;
  second: U;
}
const pair: Pair<number, string> = {
  first: 1,
  second: 'two',
};
console.log(pair.first); // 1
console.log(pair.second); // 'two'


在上述例子中,我们定义了一个泛型接口 Pair,它表示一对具有不同类型的值。通过使用泛型类型参数 TU,我们可以在创建 Pair 对象时指定不同的类型。这样可以确保 Pair 对象中的属性类型与指定的类型一致。


通过泛型,可以编写更通用、灵活和类型安全的代码。它使我们能够在不同的情况下使用相同的逻辑,但适用于不同的类型。这提高了代码的重用性和可维护性,并减少了类型错误的风险。


相关文章
|
6月前
|
XML 存储 JSON
CocosCreator 面试题(十五)Cocos Creator如何内置protobuf JS版本?
CocosCreator 面试题(十五)Cocos Creator如何内置protobuf JS版本?
175 0
|
6月前
|
前端开发
CocosCreator 面试题(九)什么是异步加载资源
CocosCreator 面试题(九)什么是异步加载资源
180 0
|
6月前
CocosCreator 面试题(十六)Cocos Creator 节点池的基本原理是什么?如何使用?
CocosCreator 面试题(十六)Cocos Creator 节点池的基本原理是什么?如何使用?
386 0
|
6月前
|
安全 网络安全 数据安全/隐私保护
CocosCreator 面试题(十四)Cocos Creator WebSocket 、Socket.IO分别是什么?
CocosCreator 面试题(十四)Cocos Creator WebSocket 、Socket.IO分别是什么?
317 0
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
3月前
|
Java
【Java基础面试四十五】、 介绍一下泛型擦除
这篇文章解释了Java泛型的概念,它解决了集合类型安全问题,允许在创建集合时指定元素类型,避免了类型转换的复杂性和潜在的异常。
|
3月前
|
Java
【Java基础面试四十四】、 说一说你对泛型的理解
这篇文章解释了Java泛型的概念,它解决了集合类型安全问题,允许在创建集合时指定元素类型,避免了类型转换的复杂性和潜在的异常。
|
5月前
|
安全 Java 编译器
Android面试题之Java 泛型和Kotlin泛型
**Java泛型是JDK5引入的特性,用于编译时类型检查和安全。泛型擦除会在运行时移除类型参数,用Object或边界类型替换。这导致几个限制:不能直接创建泛型实例,不能使用instanceof,泛型数组与协变冲突,以及在静态上下文中的限制。通配符如<?>用于增强灵活性,<? extends T>只读,<? super T>只写。面试题涉及泛型原理和擦除机制。
39 3
Android面试题之Java 泛型和Kotlin泛型
|
4月前
|
安全 Java 编译器
Java面试题:解释Java泛型的主要用途,并说明泛型擦除的概念。
Java面试题:解释Java泛型的主要用途,并说明泛型擦除的概念。
33 0
|
4月前
|
存储 安全 Java
Java面试题:请解释Java中的泛型集合框架?以及泛型的经典应用案例
Java面试题:请解释Java中的泛型集合框架?以及泛型的经典应用案例
47 0