面试题答案
一键面试1. 条件类型场景
- type的优势:条件类型在
type
中定义更灵活。例如,定义一个根据类型判断返回不同类型的工具类型:
type IsString<T> = T extends string ? true : false;
type IfString<T, U, V> = T extends string ? U : V;
这里type
可以轻松构建复杂的条件类型逻辑。理由是type
更侧重于类型运算和构建新类型,对于这种依赖类型关系进行动态类型选择的场景,它的语法和能力更适配。
2. 映射类型场景
- type的优势:在映射类型中,
type
同样表现出色。比如,将一个对象类型的所有属性变为只读:
type ReadonlyKeys<T> = {
readonly [K in keyof T]: T[K];
};
type
可以方便地基于现有类型映射出新类型,因为它专门用于类型构建,对于这种需要遍历和修改类型结构的操作,语法简洁且高效。
3. 合并类型定义
- interface的优势:
interface
用于声明合并非常方便。当你需要逐步扩展一个类型定义时,interface
很实用。例如:
interface User {
name: string;
}
interface User {
age: number;
}
// User 类型现在既有 name 又有 age
这里通过多次声明同一个interface
,实现类型的合并。理由是interface
主要用于对象类型的声明,声明合并的特性让它在逐步构建对象类型时更直观,符合面向对象编程中对类型逐步细化的思维。
4. 结合使用
- 结合方式及理由:在一些复杂场景下,可以结合使用。比如,先使用
interface
定义对象的基本结构,再用type
基于这个interface
进行复杂的类型变换。
interface User {
name: string;
age: number;
}
type ReadonlyUser = ReadonlyKeys<User>;
这样先用interface
清晰地定义对象的属性结构,符合对象类型声明的习惯,再利用type
强大的类型运算能力对interface
定义的类型进行处理,充分发挥两者的优势,高效且优雅地解决复杂类型问题。