MST

星途 面试题库

面试题:TypeScript Required工具类型在复杂嵌套对象中的应用与实现

假设有一个复杂的嵌套对象类型`{user: {name?: string; address?: {city?: string; street?: string}}}`,请实现一个工具类型,它能递归地将这个嵌套对象中所有可选属性变为必选属性,类似Required工具类型的功能,但要适用于这种多层嵌套结构。
35.9万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
type DeepRequired<T> = {
    [P in keyof T]-?: T[P] extends object
      ? DeepRequired<T[P]>
       : T[P];
};

// 示例使用
type ComplexUser = {
    user: {
        name?: string;
        address?: {
            city?: string;
            street?: string;
        };
    };
};

type RequiredComplexUser = DeepRequired<ComplexUser>;
// 此时 RequiredComplexUser 的类型为:
// {
//     user: {
//         name: string;
//         address: {
//             city: string;
//             street: string;
//         };
//     };
// }