全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页

泛型专题测试

20 题 75 分钟 难度:

考察知识点

  1. 泛型基础: 泛型函数、泛型变量、类型参数
  2. 泛型接口: 接口泛型参数、泛型签名
  3. 泛型类: 类泛型参数、泛型成员
  4. 泛型约束: extends 约束、keyof 约束、约束检查
  5. 泛型工具类型: 泛型推断、条件类型、映射类型
1
判断题

在 TypeScript 中,泛型函数的类型参数在调用时可以被自动推断,因此总是可以省略显式的类型参数指定。

A

B

2
判断题

一个泛型函数可以声明多个类型参数,这些类型参数之间可以相互引用和约束。

A

B

3
单选题

以下代码中,函数调用 identity(42) 的返回值类型是什么?

TypeScript
function identity<T>(arg: T): T {
  return arg;
}

const result = identity(42);
A

any

B

number

C

T

D

unknown

4
单选题

对于以下泛型函数,当调用 createEmpty<string>(3) 时,返回值的类型是什么?

TypeScript
function createEmpty<T>(length: number): T[] {
  return new Array<T>(length);
}

const arr = createEmpty<string>(3);
A

number[]

B

string[]

C

T[]

D

any[]

5
多选题

以下关于 TypeScript 泛型函数优势的描述,哪些是正确的?

A

可以在函数定义时保持类型的灵活性,在调用时确定具体类型

B

避免了使用 any 类型导致的类型信息丢失

C

可以为不同的调用生成不同的运行时 JavaScript 代码

D

提供了类型检查能力,IDE 能够给出准确的代码提示

6
判断题

泛型接口在使用时必须显式指定类型参数,不能依赖类型推断。

A

B

7
判断题

在泛型接口中定义的泛型参数,会作用于接口的所有成员和方法。

A

B

8
单选题

以下代码中,Processor 接口使用方式正确的是?

TypeScript
interface Processor<T> {
  process(input: T): T;
  transform<U>(input: U): U;
}

const impl: Processor<number> = {
  process(input) { return input; },
  transform(input) { return input; }
};
A

impl.transform(42) 的返回类型是 number

B

impl.transform("hello") 的返回类型是 string

C

impl.process("hello") 可以正常调用

D

impl.transform(42) 的返回类型是 unknown

9
单选题

以下关于泛型接口和泛型类型别名的区别,描述正确的是?

TypeScript
interface Handler<T> {
  handle(data: T): void;
}

type Processor<T> = (data: T) => void;
A

泛型接口可以被类实现,泛型类型别名不可以

B

泛型类型别名可以声明合并,泛型接口不可以

C

两者在泛型使用方式上没有任何区别

D

泛型接口支持声明合并,泛型类型别名不支持

10
多选题

以下哪些场景适合使用泛型接口?

A

定义通用的 API 响应格式,其中 data 字段类型可变

B

定义一个函数类型,接收和返回相同类型的参数

C

定义一个类的所有静态方法

D

定义仓储模式(Repository)的通用数据访问接口

11
判断题

TypeScript 中的泛型类可以拥有静态成员,且静态成员可以引用类的泛型参数。

A

B

12
判断题

泛型类在实例化时必须显式指定类型参数,否则类型参数会被推断为 any 类型。

A

B

13
单选题

以下代码中,StringStack 类的 items 属性类型是什么?

TypeScript
class Stack<T> {
  protected items: T[] = [];
  push(item: T): void { this.items.push(item); }
  pop(): T | undefined { return this.items.pop(); }
}

class StringStack extends Stack<string> {
  // 继承时固定 T 为 string
}

const stack = new StringStack();
A

T[]

B

string[]

C

any[]

D

unknown[]

14
单选题

以下代码能够正确编译的是?

TypeScript
interface Collection<T> {
  add(item: T): void;
  getAll(): T[];
}

// 选项A: class List<T> implements Collection<T> { ... }
// 选项B: class List implements Collection { ... }
// 选项C: class List<T> implements Collection { ... }
// 选项D: class List<U> implements Collection<T> { ... }
A

class List<T> implements Collection<T> { add(item: T) {} getAll(): T[] { return []; } }

B

class List implements Collection { add(item) {} getAll() { return []; } }

C

class List<T> implements Collection { add(item: T) {} getAll(): T[] { return []; } }

D

class List<U> implements Collection<T> { add(item: U) {} getAll(): T[] { return []; } }

15
多选题
TypeScript
interface KeyValueStore<K, V> {
  get(key: K): V | undefined;
  set(key: K, value: V): void;
}

关于以上泛型接口,以下哪些说法是正确的?

A

KV可以是相同的类型

B

KV必须是不同的类型

C

实现该接口时可以指定KstringV为任意类型

D

接口的方法可以使用KV的任意组合

16
判断题

使用 T extends string 约束后,类型参数 T 只能是 string 类型,不能是 string 的字面量类型。

A

B

17
判断题

泛型约束中,一个泛型参数可以被另一个泛型参数所约束,例如 <T, K extends keyof T> 是合法的语法。

A

B

18
单选题

以下代码中,函数体内哪行代码可以正确编译?

TypeScript
interface HasLength {
  length: number;
}

function logLength<T extends HasLength>(arg: T): number {
  // A: return arg.length;
  // B: return arg.size;
  // C: return arg.valueOf();
  // D: return arg.toString().length;
}
A

return arg.length;

B

return arg.size;

C

return arg.valueOf();

D

return arg.toString().length;

19
单选题

对于以下代码,调用 mergeObjects({ name: "Alice" }, { age: 30 }) 的返回类型是什么?

TypeScript
function mergeObjects<T extends object, U extends object>(a: T, b: U): T & U {
  return { ...a, ...b };
}
A

object

B

T & U

C

{ name: string; age: number }

D

{ name: string } | { age: number }

20
多选题

以下哪些是 TypeScript 泛型约束的合法且常见的用法?

A

使用 extends object 约束泛型参数必须是对象类型

B

使用 extends string | number 约束为联合类型中的某一个

C

使用 extends { id: number } 约束必须具有特定属性

D

使用 extends never 来禁止使用某个泛型函数

← 上一个试卷 模块基础专题测试
下一个试卷 → 深度类型编程专题测试

📝 发现内容有误?点击此处直接编辑

想参加完整模拟考试?
小程序提供计时考试、自动评分和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库