我有这个界面:

export interface UserSettings
{
    one: {
        three: number;
        four: number;
    };
    two: {
        five: number;
        six: number;
    };
}

...想把它变成这样:

export interface UserSettingsForUpdate
{
    one?: {
        three?: number;
        four?: number;
    };
    two?: {
        five?: number;
        six?: number;
    };
}

...但Partial<UserSettings>产生了这样的结果:

{
    one?: {
        three: number;
        four: number;
    };
    two?: {
        five: number;
        six: number;
    };
}

是否可以使用映射类型使所有深度上的所有属性都是可选的,或者我必须为此手动创建一个接口?

推荐答案

随着条件类型在2.8中的登陆,我们现在可以声明一个递归部分类型,如下所示.

type RecursivePartial<T> = {
  [P in keyof T]?:
    T[P] extends (infer U)[] ? RecursivePartial<U>[] :
    T[P] extends object ? RecursivePartial<T[P]> :
    T[P];
};

参考:

http://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html

Typescript相关问答推荐

如何将绑定到实例的类方法复制到类型脚本中的普通对象?

为什么ESLint抱怨通用对象类型?

无法从应用程序内的库导入组件NX Expo React Native

如何使用WebStorm调试NextJS的TypeScrip服务器端代码?

一个打字类型可以实现一个接口吗?

MatTool提示在角垫工作台中不起作用

将带点的对象键重新映射为具有保留值类型的嵌套对象

FatalError:Error TS6046:';--模块分辨率';选项的参数必须是:'; node ';,'; node 16';,'; node

下载量怎么会超过下载量?

常量类型参数回退类型

Angular material 无法显示通过API获取的数据

自定义 Select 组件的类型问题:使用带逗号的泛型类型<;T与不带逗号的<;T&>;时出错

为什么&Quot;元素隐式具有';Any';类型,因为...即使我已经打字了,也不能作为索引显示错误吗?

类型推断对React.ForwardRef()的引用参数无效

当传递带有或不带有参数的函数作为组件props 时,我应该如何指定类型?

仅当定义了值时才按值筛选数组

Typescript循环函数引用

如何使用 AWS CDK 扩展默认 ALB 控制器策略?

如何将参数传递给条件函数类型

如何在故事书的Typescript 中编写decorator ?