打字稿:排除类型中所有必需的属性

问题描述 投票:2回答:1

如何在以下代码中定义ExcludeAllRequiredProps<T>以排除(如名称所示)所有必需的属性?提前致谢。

type A = {
  a: number,
  b: number,
  c?: number,
  d?: number
}

type B = ExcludeAllRequiredProps<A>


// B shall be { c?: number, d?: number }

[编辑 - 片刻之后]

你认为这是一个合适的解决方案吗?

type ExcludeAllRequiredProps<T> = {
  [K in keyof T]?: T extends Record<K, T[K]> ? never : T[K]
}
typescript types typescript-typings typescript-types
1个回答
1
投票

你的解决方案很接近,但它保留了那些额外的密钥,这可能会导致混淆,即使它们是never类型。此解决方案将从结果中删除不需要的键:

type ExcludeAllRequiredProps<T> = Pick<T, {
    [K in keyof T]-?: T extends Record<K, T[K]> ? never : K
}[keyof T]>

type A = {
    a: number,
    b: number,
    c?: number,
    d?: number
}

type B = ExcludeAllRequiredProps<A> // { c?: number, d?: number }
© www.soinside.com 2019 - 2024. All rights reserved.