gpt4 book ai didi

typescript - 映射具有未知深度的通用 TypeScript 接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:19 24 4
gpt4 key购买 nike

我有一个递归函数,它接受一个具有通用接口(interface)的对象。该函数遍历对象并创建一个具有几乎完全相同接口(interface)的新对象,除了端节点/叶子,它将它们转换为数字。该函数返回这个新对象,但我找不到如何为其指定正确的类型。

例子:

interface IOriginal
{
prop1: string,
prop2: number,
prop3: {
prop1: boolean,
prop2: {
prop1: number
},
prop3: string
}
}

const input : IOriginal = {
prop1: "somestring",
prop2: 5,
prop3: {
prop1: true,
prop2: {
prop1: 2
},
prop3: "otherstring"
}
}

function traverse<T>(obj: T)
{
/* ... map the object ... */
return mappedObj
}

const output = traverse(input)

和输出的(映射对象的)接口(interface)应该是这样的

interface IOutput
{
prop1: number,
prop2: number,
prop3: {
prop1: number,
prop2: {
prop1: number
},
prop3: number
}
}

对于映射类型,我似乎只能映射第一层深度,如果这有意义的话。

最佳答案

您可以使用条件类型来实现此结果:

type LeafsToNumbers<T> = 
T extends string | number | boolean ? number : // If primitive transform to number
{ [ P in keyof T] : T[P] extends (infer U)[] ? LeafsToNumbers<U>[] : LeafsToNumbers<T[P]> }; // Otherwise recursively map, with a special case for arrays.

function traverse<T>(obj: T) : LeafsToNumbers<T>
{
/* ... map the object ... */
return null as any;
}
let a: IOriginal;
let o = traverse(a);
o.prop1 //number
o.prop3.prop1 // number

关于typescript - 映射具有未知深度的通用 TypeScript 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50694159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com