【问题标题】:Extract values from deeply nested object structure从深度嵌套的对象结构中提取值
【发布时间】:2021-07-18 09:40:39
【问题描述】:

我有一个深度嵌套的对象结构,其中包含所有应该有一个value 键的其他对象,我试图保留对象结构并用每个键的值类型替换值。现在我创建了一个类型Result,它几乎可以完成我需要它做的事情,但是,创建的类型也有一个错误。

T[key]['value'] - Type '"value"' cannot be used to index type 'T[key]'.(2536)

我也在为如何做到这一点而苦苦挣扎,如果value 属性不存在,则默认为string

class A<T = string>{
    constructor(public value:T){}
}

const data = {
    propA: {value:'test'},
    nested:{
        propA: new A([123]),
        propBool: new A(123)
    }
}


type Replace<T, A extends {value:any}={value:any}> = T extends object
    ? { [key in keyof T]: T[key] extends {value:any}? T[key]['value'] : Replace<T[key], A> }
    : T;


type Result = Replace<typeof data> //ok

class A<T = string>{
    constructor(public value:T){}
}

const data = {
    propA: {value:'test'},
    nested:{
        propA: new A([123]),
        propBool: new A(123)
    }
}


type Replace<T, A extends {value:any}={value:any}> = T extends object
    ? { [key in keyof T]: T[key] extends {value:any}? T[key]['value'] : Replace<T[key], A> }
    : T;


type Result = Replace<typeof data>

// result
type Result = {
    propA: string;
    nested: {
        propA: number[];
        propBool: number;
    };
}

Typescript Playground

【问题讨论】:

  • 这看起来和stackoverflow.com/questions/67240685/…一模一样,所以你可以做同样的事情-T[key]['value' &amp; keyof T[key]]
  • @NadiaChibrikova 你能把这个作为答案发给我吗?

标签: typescript typescript-generics


【解决方案1】:

可以使用交集类型来确认valueT[key]的字段之一:T[key]['value' &amp; keyof T[key]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    相关资源
    最近更新 更多