是否可以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
Run Code Online (Sandbox Code Playgroud)
是的,您可以测试any:
type IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N;
type IsAny<T> = IfAny<T, true, never>;
type A = IsAny<any> // true
type B = IsAny<number> // never
type C = IsAny<unknown> // never
type D = IsAny<never> // never
Run Code Online (Sandbox Code Playgroud)
对此的解释在此答案中。简而言之,这any是故意不健全的,并且违反了正常的类型规则。您可以检测到这种违规,因为它会让您疯狂地执行诸如分配0给的操作1。
另一种检测 IsAny 的方法:
type IsAny<T> = (
unknown extends T
? [keyof T] extends [never] ? false : true
: false
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |