我的根本问题是,我需要检测一个类型是Array<any>
(不是任何其他Array类型)。
我可以通过两种组合条件检测到这一点:T extends Array<any>
和Array<any> extends
我如何编写一个条件类型,而不必像下面这样求助于双三进制:
type foo<T> = T extends Array<any> ? Array<any> extends T ? T : 'not any array' : 'not any array';
我的根本问题是,我需要检测一个类型是Array<any>
(不是任何其他Array类型)。
我可以通过两种组合条件检测到这一点:T extends Array<any>
和Array<any> extends
我如何编写一个条件类型,而不必像下面这样求助于双三进制:
type foo<T> = T extends Array<any> ? Array<any> extends T ? T : 'not any array' : 'not any array';
2条答案
按热度按时间eh57zj3b1#
下面是如何做到我 * 假设 * 你想做的事情(如果需要,请在评论中纠正我)
如果你想要
Exclude
:xoshrz7s2#
下面是一个只使用1个条件类型的方法,借用了this answer的技巧:
这里有两张支票:一个两个检查
any[]
,另外两个禁止never[]
。为了检查any[]
,我们使用与链接答案相同的原则:any
允许我们做一些疯狂的事情,比如将1[]
分配给0[]
。然而,这也允许never[]
溜走。为了处理
never[]
,我们使用了另一种检查。因为never
是底部类型,所以没有任何东西可以分配给它。这意味着我们只需要检查any[]
是否可以分配给T
。示例测试:
Playground