面试题答案
一键面试// 定义用户信息及权限的基础类型
type UserInfo = {
id: number;
name: string;
age: number;
permissions: string[];
};
// 使用Readonly和Partial来创建新类型
// Readonly确保整个对象只读
// Partial使对象的所有属性变为可选,实现部分可更新性
type ReadonlyPartialUserInfo = Readonly<Partial<UserInfo>>;
// 创建一个符合ReadonlyPartialUserInfo类型的对象
const user: ReadonlyPartialUserInfo = {
id: 1,
name: 'John Doe'
// 这里可以只提供部分属性,因为使用了Partial
// 并且对象整体是只读的,因为使用了Readonly
};
// 尝试修改属性(这会导致编译错误,因为对象是只读的)
// user.id = 2;
解释:
- 首先定义了
UserInfo
类型,它包含用户的基本信息和权限数组。 - 然后通过
Readonly
和Partial
组合创建了ReadonlyPartialUserInfo
类型。Readonly
修饰符会让整个对象的属性变为只读,无法重新赋值。Partial
修饰符会将UserInfo
中的所有属性变为可选,这样在创建对象时可以只提供部分属性,实现部分可更新的概念(虽然对象创建后整体只读,但创建时可以灵活设置部分属性)。 - 最后创建了一个符合
ReadonlyPartialUserInfo
类型的user
对象,并演示了尝试修改只读属性会导致编译错误。