检查类型是否为未知类型

Str*_*ler 3 typescript

有没有办法检查类型参数是否T实际上是unknown类型?

我知道可以检查any此处的解决方案),但想知道unknown

Voj*_*nad 7

最简单的解决方案是这样的:

type IsUnknown<T> = unknown extends T ? true : never
Run Code Online (Sandbox Code Playgroud)

但是,它也会返回truefor any,因为它可以分配给任何类型。如果您需要处理这种情况,请借用解决方案IsAny并执行以下操作:

type IsUnknown<T> = IsAny<T> extends true ? never : unknown extends T ? true : never

type A = IsUnknown<unknown> // true
type B = IsUnknown<any> // never
type C = IsUnknown<never> // never
type D = IsUnknown<string> // never
Run Code Online (Sandbox Code Playgroud)

游乐场链接