【问题标题】:How can I get the keys from an object that is union as shared?如何从联合为共享的对象中获取密钥?
【发布时间】:2022-08-18 01:21:28
【问题描述】:

例如

如果我采用这种类型并将其放入keyof,我永远不会。

type T = {
        items?: string[] | undefined;
        \'items.0.kind\'?: string[] | undefined;
        \'items.0.institution\'?: string[] | undefined;
        \'items.0.started_at\'?: string[] | undefined;
        \'items.0.finished_at\'?: string[] | undefined;
        \'items.0.specialization\'?: string[] | undefined;
        \'items.0.qualification\'?: string[] | undefined;
    } | {
        user_is_blocked?: string[] | undefined;
        jwt_token_is_invalid?: string[] | undefined;
        jwt_token_is_expired?: string[] | undefined;
    }
type Keys = keyof T // === never

    标签: typescript


    【解决方案1】:

    您可以使用条件分配类型对联合的部分进行操作:

    type T = {
            items?: string[] | undefined;
            'items.0.kind'?: string[] | undefined;
            'items.0.institution'?: string[] | undefined;
            'items.0.started_at'?: string[] | undefined;
            'items.0.finished_at'?: string[] | undefined;
            'items.0.specialization'?: string[] | undefined;
            'items.0.qualification'?: string[] | undefined;
        } | {
            user_is_blocked?: string[] | undefined;
            jwt_token_is_invalid?: string[] | undefined;
            jwt_token_is_expired?: string[] | undefined;
        }
    
    type Distributive<T> = T extends any ? keyof T: never
    type Keys = Distributive<T> 
    

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-21
      • 2022-08-22
      • 1970-01-01
      • 2018-01-16
      相关资源
      最近更新 更多