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