【发布时间】:2020-11-24 00:56:03
【问题描述】:
我可以充分利用像Extract<T> 这样的类型,它可以解析联合T 中不是string 或number 的所有类型。这可能吗?
Extract<T, string | number> 会找到 扩展 string 或 number 的所有内容,但我想要一些可以提取所有内容的东西,这不是 完全 string 或 @ 987654335@.
我想要的一些例子,如果类型被命名为NonIndex:
NonIndex<string | 1>; // expect 1
NonIndex<'a' | 1>; // expect 'a' | 1
NonIndex<string | 'a'>; // expect 'a'
Here 是我在操场上最近的一次,但你可以看到它还不正确。能做到吗?
我的激励用例是(基本上)改进omit() 在我的一个开源库中的输入。如果你很勇敢,可以看看我的几乎解决方案here。但请注意,它有很多打字!正如该链接所评论的那样,除了最后一行之外,一切都运行良好。
【问题讨论】:
-
你为什么要这个?是this question或this question中提到的用例吗?如果不是,那你能详细说明一下吗?也许有其他解决方案可以解决您的根本问题。
-
当然。我更新了我的问题以包括我的实际用例。但它需要接受很多东西!
-
看起来你想要第二个链接问题中的
KnownKeys,但你的omit的细节比我想涉足的要多一点。请注意如何使用KnownKeys来构建Omit的不同版本,它在面对可索引类型时表现得更好一些,例如this。您的用例是否希望Omitʹ<T, string>从T中删除所有 known 字符串文字键以及任何字符串索引取决于您,但您可以使用KnownKeys这样做。如果这构成了你的答案,我会写下来。 -
感谢指点和操场!我希望
Omit'<T, string>不考虑索引键(从Record<string, any>中省略单个未知字符串仍然是Record<string, any>)并将已知参数变为可选参数(因为我们不知道可能省略了哪个参数,如果有的话)。省略已知字符串也应该单独保留索引键,但删除匹配的已知键。我会用你今晚给我的东西来看看我能不能把它融合在一起! -
我尝试了一段时间让事情正常进行,并在此过程中学到了东西。谢谢你的帮忙!最后,我决定妥协,不支持最稀有的用例,因为我无法弄清楚它们。
标签: typescript typescript-typings