是否可以使用typescript条件检查any
的确切类型?
type IsAny<T> = T extends any ? true : never
type A = IsAny<any> // true
type B = IsAny<number> // never
type C = IsAny<unknown> // never
type D = IsAny<never> // never
字符串
是否可以使用typescript条件检查any
的确切类型?
type IsAny<T> = T extends any ? true : never
type A = IsAny<any> // true
type B = IsAny<number> // never
type C = IsAny<unknown> // never
type D = IsAny<never> // never
字符串
3条答案
按热度按时间mum43rcc1#
你可以测试
any
:字符串
这个问题的解释就在这个答案中。简而言之,
any
是故意不合理的,违反了正常的类型规则。你可以检测到这种违反,因为它允许你做一些疯狂的事情,比如把0
赋值给1
。vulvrdjw2#
另一种检测IsAny的方法:
字符串
的数据
643ylb083#
你可以(ab)利用
any
是几乎所有东西的 * 子类型 * 和 * 超类型 * 的事实。所以内部(分布)条件类型解析为true | false
的并集(=boolean
)而不是它们中的任何一个。我检查了T extends never
,但它也适用于几乎任何其他类型。字符串
TypeScript Playground
1,
never
除外