【问题标题】:typescript how to transfrom undefined property to optional property打字稿如何将未定义的属性转换为可选属性
【发布时间】:2019-05-15 18:18:53
【问题描述】:

我有类似的代码

interface Test {
  prop: number | undefined
}

我想将未定义的属性转换为可选属性,例如

type ToOptional = ???
ToOptional<Test>
/** transform result
{
  prop?: number
}
*/

我应该如何定义 ToOptional?

编辑:

interface Test {
  prop1: number | undefined;
  prop2: number;
}

type ToOptional = ???
ToOptional<Test>
/** transform result
{
  prop1?: number
  prop2: number
}
*/

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您可以使用映射类型和条件类型来提取其中包含undefined 的属性,然后从该类型中选择undefined 属性。同样,我们需要选择未定义的属性以取回所有原始属性

    interface Test {
        prop: number | undefined
        prop2: number
        prop3?: number
    }
    
    type UndefinedProperties<T> = {
        [P in keyof T]-?: undefined extends T[P] ? P : never
    }[keyof T]
    
    type ToOptional<T> = Partial<Pick<T, UndefinedProperties<T>>> & Pick<T, Exclude<keyof T, UndefinedProperties<T>>>
    
    type t = ToOptional<Test>
    

    【讨论】:

    • 好主意!注意:如果不启用 strictNullChecks,这将导致所有字段都是可选的:TS playground
    猜你喜欢
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2020-03-15
    • 2019-04-18
    • 2018-07-27
    • 2018-06-05
    • 1970-01-01
    相关资源
    最近更新 更多