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

TypeScript 中级技能认证测试

20 题 75 分钟 难度:

考察知识点

  1. 泛型 - 泛型函数、泛型接口、泛型类、泛型约束、extends/keyof 约束
  2. 装饰器 - 类装饰器、方法装饰器、属性装饰器、参数装饰器、装饰器工厂、装饰器执行顺序
  3. 声明文件基础 - .d.ts 文件作用、declare 关键字、模块声明、类型声明语法、声明文件组织
  4. 常用内置工具类型 - Partial/Required、Pick/Omit、Record、Readonly、Exclude/Extract 等工具类型的使用
1
判断题

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

A

B

2
单选题

对于以下泛型函数,当调用 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[]

3
判断题

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

A

B

4
多选题

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

A

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

B

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

C

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

D

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

5
单选题

以下代码中,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[]

6
判断题

类装饰器接收的参数是类的构造函数,返回值可以是 void 或者一个新的构造函数。

A

B

7
单选题

使用类装饰器为类添加静态方法,正确的实现方式是?

A

修改 constructor.prototype 添加方法

B

直接在构造函数上添加方法属性

C

使用 Object.defineProperty 在原型上定义

D

必须返回全新的类定义

8
判断题

当方法装饰器应用于静态方法时,target 参数是该类的构造函数而非原型对象。

A

B

9
多选题

以下哪些是方法装饰器的典型应用场景?

A

日志记录与性能监控

B

修改方法参数类型

C

权限校验与安全拦截

D

事务管理与错误重试

10
单选题

使用访问器装饰器实现属性懒加载,正确的做法是?

A

在 descriptor.get 中检查缓存,未命中时计算并缓存

B

在 descriptor.set 中检查缓存

C

删除 descriptor.get 并直接赋值

D

在类的构造函数中初始化所有属性

11
判断题

TypeScript 的 .d.ts 声明文件在编译时会被编译为对应的 .js 文件并输出到目标目录。

A

B

12
单选题

tsconfig.json 中,哪个配置项用于控制是否自动生成 .d.ts 声明文件?

A

strictNullChecks

B

declaration

C

emitDeclarationOnly

D

declarationDir

13
判断题

在为第三方模块编写 .d.ts 声明文件时,需要使用 declare module "模块名" 的语法来声明模块的类型。

A

B

14
单选题

当项目中使用了 lodash 库且需要类型提示时,以下哪种做法是最推荐的?

A

手动在项目中创建 lodash.d.ts 文件并编写完整声明

B

安装 @types/lodash

C

tsconfig.json 中设置 "skipLibCheck": true

D

lodash 的类型声明为 any

15
判断题

在 TypeScript 中,使用 Partial<T> 工具类型可以将类型 T 的所有属性变为可选属性,但不会改变属性的原始类型。

A

B

16
判断题

TypeScript 的 Omit<T, K> 工具类型与 Pick<T, K> 的功能完全相同,都是从类型 T 中选择指定的属性。

A

B

17
单选题
TypeScript
interface Config {
  host?: string;
  port?: number;
  timeout?: number;
}

使用 Required<Config> 后,以下哪个描述是正确的?

A

所有属性仍然是可选的,类型不变

B

所有属性变为必填,但类型仍保持原有的可选类型联合

C

所有属性变为必填,且属性类型中移除了 undefined

D

只有 host 属性变为必填

18
单选题
TypeScript
interface User {
  name: string;
  address: {
    city: string;
    zip: string;
  };
}
const user: Readonly<User> = {
  name: "Alice",
  address: { city: "Beijing", zip: "100000" }
};

关于以上代码,以下哪个操作会导致编译错误?

A

user.name = "Bob";

B

user.address.city = "Shanghai";

C

user.address = { city: "Shanghai", zip: "200000" };

D

console.log(user.name);

19
多选题
TypeScript
interface Product {
  id: number;
  name: string;
  price: number;
  description: string;
  createdAt: Date;
}

关于以上类型,以下哪些表达式的结果类型是 { name: string; price: number }

A

Pick<Product, 'name' | 'price'>

B

Omit<Product, 'id' | 'description' | 'createdAt'>

C

Required<Pick<Product, 'name' | 'price'>>

D

Partial<Pick<Product, 'name' | 'price'>>

20
判断题

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

A

B

下一个试卷 → TypeScript 初级技能认证测试

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

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

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

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