最简单的解决方案是这样的:
type IsUnknown<T> = unknown extends T ? true : never
但是,它也会为
true
返回 any
,因为它可以分配给任何类型。如果您需要处理这种情况,请借用 IsAny
的解决方案并执行以下操作:
type IsUnknown<T> = IsAny<T> extends never ? unknown extends T ? true : never : never
type A = IsUnknown<unknown> // true
type B = IsUnknown<any> // never
type C = IsUnknown<never> // never
type D = IsUnknown<string> // never