TypeScript 中级技能认证测试
考察知识点
- 泛型 - 泛型函数、泛型接口、泛型类、泛型约束、extends/keyof 约束
- 装饰器 - 类装饰器、方法装饰器、属性装饰器、参数装饰器、装饰器工厂、装饰器执行顺序
- 声明文件基础 - .d.ts 文件作用、declare 关键字、模块声明、类型声明语法、声明文件组织
- 常用内置工具类型 - Partial/Required、Pick/Omit、Record、Readonly、Exclude/Extract 等工具类型的使用
在 TypeScript 中,泛型函数的类型参数在调用时可以被自动推断,因此总是可以省略显式的类型参数指定。
对于以下泛型函数,当调用 createEmpty<string>(3) 时,返回值的类型是什么?
function createEmpty<T>(length: number): T[] {
return new Array<T>(length);
}
const arr = createEmpty<string>(3);
在泛型接口中定义的泛型参数,会作用于接口的所有成员和方法。
以下哪些场景适合使用泛型接口?
以下代码中,StringStack 类的 items 属性类型是什么?
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();
类装饰器接收的参数是类的构造函数,返回值可以是 void 或者一个新的构造函数。
使用类装饰器为类添加静态方法,正确的实现方式是?
当方法装饰器应用于静态方法时,target 参数是该类的构造函数而非原型对象。
以下哪些是方法装饰器的典型应用场景?
使用访问器装饰器实现属性懒加载,正确的做法是?
TypeScript 的 .d.ts 声明文件在编译时会被编译为对应的 .js 文件并输出到目标目录。
在 tsconfig.json 中,哪个配置项用于控制是否自动生成 .d.ts 声明文件?
在为第三方模块编写 .d.ts 声明文件时,需要使用 declare module "模块名" 的语法来声明模块的类型。
当项目中使用了 lodash 库且需要类型提示时,以下哪种做法是最推荐的?
在 TypeScript 中,使用 Partial<T> 工具类型可以将类型 T 的所有属性变为可选属性,但不会改变属性的原始类型。
TypeScript 的 Omit<T, K> 工具类型与 Pick<T, K> 的功能完全相同,都是从类型 T 中选择指定的属性。
interface Config {
host?: string;
port?: number;
timeout?: number;
}
使用 Required<Config> 后,以下哪个描述是正确的?
interface User {
name: string;
address: {
city: string;
zip: string;
};
}
const user: Readonly<User> = {
name: "Alice",
address: { city: "Beijing", zip: "100000" }
};
关于以上代码,以下哪个操作会导致编译错误?
interface Product {
id: number;
name: string;
price: number;
description: string;
createdAt: Date;
}
关于以上类型,以下哪些表达式的结果类型是 { name: string; price: number }?
使用 T extends string 约束后,类型参数 T 只能是 string 类型,不能是 string 的字面量类型。
📝 发现内容有误?点击此处直接编辑
长按或扫描二维码,立即体验