我想写一个函数,把任何对象的属性的所有示例都转换成未定义的。我的许多对象都有嵌套的对象作为属性或值/对象的数组。
在处理这个问题时,我的第一个想法是使用泛型来尝试捕获每个具有泛型类型的属性的类型,然后根据需要将该属性的值从null转换为undefined。
我希望写一个足够通用的函数,可以在我的代码库中的任何不同类型和大小的对象上工作。
我还没能找到一个简单的方法来拥有未知数量的泛型类型,所以我的下一个想法是我必须在任何地方使用any类型。有什么方法可以解决这个问题吗?
我也希望得到一些关于方法/算法本身的建议。我的想法是,我可能需要递归地检查每个属性,看看它本身是否是一个具有子属性的对象,我还需要迭代找到的任何可能也具有空值的数组,或者具有也需要递归检查的对象。
我需要解决/回答的问题:
1.我应该使用泛型还是任何?
1.如果我使用泛型,有没有一种方法可以在发现新类型时动态地分配新的泛型类型?
- typescript有更简单的方法来递归地解析对象吗?
我目前的方法是这样的:inputObjectKeys.map(key, index) =>
然后有一个函数将null转换为undefined,忽略非对象类型,如果它是一个对象则递归。
我假设我想使用广度优先搜索或深度优先搜索(我倾向于广度优先搜索这个特定的任务)。我假设,因为我需要访问每个节点,我可能会更好地与DFS只是因为内存使用。
7条答案
按热度按时间8wigbo561#
accepted answer实际上没有回答这个问题,因为它被要求使用通用的方法。
下面是一个类似的例子,它也能正确地转换返回类型:
功劳归于这位天才的打字:https://github.com/apollographql/apollo-client/issues/2412#issuecomment-755449680
fgw7neuy2#
有点晚了,但我认为格兰特的回答可以简化一点。下面这个怎么样:
ibrsph3r3#
为了递归地处理所有类型:
tkclm6bt4#
accepted answer不是类型安全的。
This answer是封闭的,但不处理嵌套数组内的
null
。这会将嵌套对象和数组中的
null
替换为undefined
:qoefvg9y5#
我的回答并不漂亮,但这就是我要做的:
mdfafbf16#
z31licg07#
可以使用真值类型的值。使用
!!
运算符将值转换为真值类型的值。