20 道 TypeScript 测试题(均为选择题)

小麦小麦

1.以下代码中 never 类型的使用,哪个说法是正确的?

function fail(): never {
  throw new Error("fail");
}
type T = string & never;

A. fail 永远不会返回,T 类型为 string

B. fail 永远不会返回,T 类型为 never

C. fail 返回 void,T 类型为 never

D. fail 返回 null,T 类型为 never


2.(多选)以下哪个方式能确保对象属性在编译期不可修改?

const obj = { x: 1 };

A. const obj: { readonly x: number } = { x: 1 };

B. Object.freeze(obj);

C. readonly obj = { x: 1 };

D. const obj = { x: 1 } as const;


3.关于联合类型和交叉类型的说法,哪个是正确的?

type U = { a: number } | { b: string };
type I = { a: number } & { b: string };

A. U 必须同时拥有 a 和 b

B. I 必须同时拥有 a 和 b

C. U 是 I 的子类型

D. I 是 U 的子类型


4.以下哪个声明会在 strictNullChecks 模式下编译错误?

A. let x: unknown = null;

B. let x: undefined = undefined;

C. let x: void = null;

D. let x: any = undefined;


5.(多选)关于泛型约束,以下哪些写法是合法的?

A. function fn(x: T) {}

B. function fn(x: T) {}

C. function fn(x: T) {}

D. function fn(x: T) {}


6.以下哪个工具类型的推导结果是 { x?: number; y?: string }?

interface Point { x: number; y: string; }

A. Partial

B. Readonly

C. Omit

D. Pick


7.在以下枚举定义中,Status.Success 的值是什么?

enum Status { Error = 500, Success, Pending }

A. 500

B. 501

C. 'Success'

D. 0


8.(多选)关于可选参数的默认值,下列哪些选项是正确的?

function fn(a?: number, b = 2) { return a ?? b; }

A. 调用 fn() 返回 2

B. 调用 fn(undefined) 返回 2

C. 调用 fn(0) 返回 2

D. a 的类型是 number | undefined


9.(多选)关于 void 类型的使用,以下哪个是正确的?

A. void 类型可以赋值给 undefined

B. undefined 类型可以赋值给 void

C. void 类型可以赋值给 null

D. void 类型不能赋值给任何类型


10.(多选)以下关于 enum 和 const enum 的说法正确的是:

A. const enum 会在编译时内联值

B. enum 会在运行时生成对象

C. const enum 和 enum 在编译输出上完全一致

D. const enum 不能有计算值成员


11.以下哪个声明创建了一个合法的交叉类型?

A. type A = { a: number } & { b: string };

B. type A = number & string;

C. type A = string & {};

D. 以上全部


12.以下代码中 C 的类型是什么?

interface A { name: string; }
interface B { age: number; }
type C = A & B;

A. { name: string }

B. { name: string, age: number }

C. { age: number }

D. { name: string } | { age: number }


13.在 strictNullChecks 模式下,以下代码会报错的是:

A. let x: number = null;

B. let x: number | null = null;

C. let x: any = null;

D. let x: unknown = null;


14.以下哪个定义可以声明一个函数类型接口?

A. interface Fn { (x: number): string; }

B. interface Fn { new (x: number): string; }

C. type Fn = (x: number) => string;

D. A 和 C 都可以


15.以下哪个工具类型返回函数参数的元组类型?

A. Parameters

B. ReturnType

C. ConstructorParameters

D. InstanceType


16.以下 output 的类型是什么?

function identity<T extends string | number>(arg: T): T {
  return arg;
}
let output = identity("hello");

A. string

B. "hello"

C. T

D. string | number


17.以下哪个工具类型可以从 Person 中选出 name 和 age 属性?

interface Person { name: string; age: number; gender: string; }

A. Pick

B. Omit

C. Record<'name' | 'age', any>

D. A 和 B 都可以


18.关于 implements 的正确用法是:

A. class A implements B {} 要求 B 是接口

B. class A implements B {} 要求 B 是类

C. class A implements B {} 要求 B 是泛型

D. implements 可以用来继承类的实现


19.以下条件类型的结果是什么?

type T = number extends number | string ? 'Y' : 'N';

A. 'Y'

B. 'N'

C. never

D. boolean


20.以下哪个声明正确定义了类的静态只读属性?

A. static readonly id: number = 1;

B. readonly static id: number = 1;

C. private static readonly id: number = 1;

D. A 和 C 都正确

TypeScript
TypeScript

TypeScript 是一种为 JavaScript 添加了静态类型检查的编程语言,它能够在开发阶段帮助开发者发现潜在的错误,提升代码的可维护性和可读性。它完全兼容 JavaScript,支持现有的 JS 代码和第三方库,同时提供了丰富的类型系统,包括接口、泛型、联合类型以及实用工具类型等高级特性。在前端开发中,TypeScript 广泛应用于 Vue、React 等框架,例如在 Vue 单文件组件中通过 lang="ts" 即可启用 TypeScript,使模板和脚本都获得更强的类型支持和开发时的智能提示。

 
Copyright © 2025 前研学院. All rights reserved.