MST
星途 面试题库

面试题:TypeScript 映射类型与条件类型结合

给定一个接口 `User`,如下:`interface User { name: string; age: number; isAdmin: boolean; }`,请使用映射类型和条件类型创建一个新的类型 `ReadOnlyUser`,它将 `User` 中的所有属性变为只读属性。同时,创建一个 `OptionalUser` 类型,它将 `User` 中的所有属性变为可选属性。最后,实现一个 `PartiallyReadOnlyUser` 类型,它将 `User` 中的 `isAdmin` 属性变为只读,其他属性保持不变。
17.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
interface User {
    name: string;
    age: number;
    isAdmin: boolean;
}

// 将User中的所有属性变为只读属性
type ReadOnlyUser = {
    readonly [K in keyof User]: User[K];
};

// 将User中的所有属性变为可选属性
type OptionalUser = {
    [K in keyof User]?: User[K];
};

// 将User中的isAdmin属性变为只读,其他属性保持不变
type PartiallyReadOnlyUser = {
    [K in Exclude<keyof User, 'isAdmin'>]: User[K];
} & {
    readonly isAdmin: User['isAdmin'];
};