假设您有一个 for in 循环,突然意识到您的变量类型是字符串而不是字符串文字联合类型。因此,当您使用 tsc 编译应用程序时,您会遇到这个丑陋的错误,并且令人烦恼的是您最喜欢的 IDE 很可能会在其冲刺的顶部尖叫:
[!注意]
只是为了向您展示它是如何完成的,我正在使用 os.cpus。在那里我尝试循环 cpu.times 这是一个对象。您可以在这里找到更多信息。
所以这是有问题的代码:
所以让我们开始吧,第一部分我们需要为自己创建一个自定义实用程序类型,这是我们最终的实用程序类型的样子:
让我们来分解一下:
[T 键中的 T 键]-?是一个“映射类型”,它在这里特别有用,因为我们不知道传递给该实用程序类型的对象内的键的名称。在这里,您将逻辑核心信息传递给它或任何其他对象,然后它迭代键以从中创建一个新类型。
还有-?是否可以删除可选性,以便我们拥有所有键的字符串文字联合类型。换句话说, { keyName?: string } 将被视为 { keyName: string }.
(TKey extends K ? keyof T[TKey] : never) 检查迭代中的当前键是否与传递的键 (K) 匹配,如果是,则将其中的所有键提取为字符串文字联合类型并归还它。否则它什么也不返回。
然后,如果步骤 3 没有结果,它将递归地在 T[Tkey] 上应用此实用程序类型,这样我们的实用程序函数也适用于嵌套对象。这通常称为“递归条件类型”。
最后我们要求它取映射类型生成的所有类型的并集。简而言之,我们正在展平嵌套结构。
现在是时候使用它了:
以上是递归条件类型的详细内容。更多信息请关注PHP中文网其他相关文章!