打字稿覆盖深键

Typescript override deep key

假设我有这样一个界面

interface Theme {
  a: {
    b?: {
      c: CustomType;
    }
  }
  ...
}

如何将这个主题界面覆盖到一个新的界面中,并将 b 更改为始终定义? (删除 ?)显然我想保持其他一切不变。

编辑:我无权访问 CustomType

因为 parameter?: typeparameter: type | undefined 的 shorthand 你可以 :

interface Theme1 extends Theme {
  a: {
    b: {
      c: CustomType;
    }
  }
}

试试这个:

type NewTheme = Theme & {
  a: {
    b: NonNullable<Theme['a']['b']>
  }
}

Playground