全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 8 道配套习题

高阶文件声明专题

专题说明

本专题涵盖TypeScript高阶声明文件编写技巧,包括复杂模块声明、类型增强、条件类型声明等高级声明文件技能。

学习目标

  1. 掌握复杂JavaScript库的类型声明编写
  2. 理解模块声明与全局声明的混合使用
  3. 能够为复杂API编写完整类型声明

学习建议

建议参考 DefinitelyTyped 项目的优秀声明文件。

📝 配套习题(8 题)

💡 参考答案在文末
判断题
1

在 TypeScript 的结构化类型系统中,函数 A = (x: Animal) => void 可以赋值给函数 B = (x: Dog) => void

A

B

多选题
2

关于 TypeScript 编译器(tsc)的编译流程,以下说法正确的有哪些?

A

TypeScript 编译器首先进行词法分析(Lexical Analysis),将源代码转换为 Token 流

B

语法分析(Parsing)阶段会生成抽象语法树(AST),TypeScript 使用的是自己定制的 AST 格式,与 ESTree 不完全兼容

C

类型检查(Type Checking)是在 AST 生成之后、代码发射(Emit)之前独立执行的阶段

D

代码发射(Emit/Transpilation)阶段会将 TypeScript 特有的语法(如 interface、enum)转换为等价的 JavaScript 代码

3

在 TypeScript 编译过程中,以下 tsconfig.json 配置项中,哪些会影响代码发射(Emit)阶段生成的 JavaScript 输出结果(而非仅影响类型检查)?

A

"target": "ES2020" — 指定生成的 JavaScript 语言版本

B

"strict": true — 启用所有严格类型检查选项

C

"module": "ESNext" — 指定模块代码生成方式

D

"emitDecoratorMetadata": true — 在发射时生成装饰器类型元数据

4

TypeScript 编译器在词法分析阶段会生成哪些产物?

A

Token 流(词法单元序列)

B

抽象语法树(AST)

C

符号表(Symbol Table)的初步信息

D

类型检查报告

5

TypeScript 编译器的语法分析(Parser)阶段的主要职责包括哪些?

A

将 Token 流转换为抽象语法树(AST)

B

检测语法错误并报告

C

进行类型推断

D

处理.decorators装饰器语法

填空题
6

在 TypeScript 的结构化类型系统中,判断以下函数类型的赋值兼容性:

TypeScript
type Handler = (x: string | number) => void;
type SpecificHandler = (x: string) => void;

const h1: Handler = function(x: string) { console.log(x); };
const h2: SpecificHandler = function(x: string | number) { console.log(x); };

上述代码中,赋值语句 const h1: Handler = ... 是否会报类型错误?赋值语句 const h2: SpecificHandler = ... 是否会报类型错误?

请分别回答:h1 赋值 ____________,h2 赋值 ____________。(填写"会报错"或"不会报错")

简答题
7

TypeScript 采用的是结构化类型系统(Structural Typing / Duck Typing),而 Java、C# 等语言采用的是名义类型系统(Nominal Typing)。

请回答以下问题:

  1. 以下代码在 TypeScript 中为何能编译通过?在 Java 中会怎样?
TypeScript
class Dog { bark() { console.log("woof"); } }
class Wolf { bark() { console.log("howl"); } }
const d: Dog = new Wolf(); // TS 中合法
  1. TypeScript 的结构化类型在什么场景下会带来安全隐患?请举例说明。

  2. TypeScript 是否提供了模拟名义类型检查的方式?如果有,请给出实现方案。

8

TypeScript 是结构化类型系统(Structural Typing),两个结构相同的类型被视为兼容。请说明如何在这种系统中模拟"名义类型"(Nominal Type)的效果,使两个结构相同但语义不同的类型互不兼容。

参考答案
1.正确 2.A; B; C; D 3.A; C; D 4.A;C 5.A;B;D 6.不会报错; 会报错 7. 8.
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 高阶工具类型专题
下一个专题 → 高阶类型体系专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码