Secrets of ‘unknown’ Types in TypeScript | by Zachary Lee | Apr, 2022

This put up will introduce the unknown kind in TypeScript, which was launched in TypeScript 3.0 and is the type-safe counterpart of any.

Why do I say this? Subsequent, I’ll present the traits of unknown kind and its benefits in contrast with any, let’s get began!

Every kind are assignable to unknown, however in flip, unknown can solely be assigned to itself and any.

In intersection varieties, all kinds will soak up unknown.

This isn’t obscure, as a result of the intersection kind represents the intersection of the 2, and we already know within the earlier part that each one varieties are assignable to unknown, so any intersection with unknown can be itself.

In union varieties, unknown absorbs all kinds.

The union kind represents the mix of the 2. If the 2 might be mixed, then the one with the extra relaxed vary can be returned, so it’s unknown aside from any.

keyof unknown returns the kind by no means, representing the kind of the worth that can by no means happen. Whereas keyof any returns the kind of any worth that can be utilized as an object index. Why do you say that?

It’s because there’s a keyofStringsOnly within the TypeScript compilation choices, the default is fake, then keyof any will return string | quantity | image kind, When true, keyof any will return kind string.

It’s value noting that the built-in superior kind File in TypeScript makes use of this to qualify varieties that can be utilized as object indexes. Its supply code is as follows:

kind File<Okay extends keyof any, T> = 
[P in K]: T;

For extra data on built-in utility varieties in TypeScript, please take a look at my earlier article:

unknown variables declared with out const are at all times thought of initialized.

Apart from the equality operators, you can’t use some other operators, corresponding to +-*/ , property entry, operate calls, and so on., with out narrowing the kind of unknown.

From the earlier part, we all know that if we wish to manipulate the worth of the unknown kind, we should first slim the kind, in order that the TypeScript compiler is aware of what we’re doing, and your code is assured to be protected.

Narrowing varieties can use typeof, instanceof, user-defined kind predicates, kind assertions, and so on.

Observe that TypeScript doesn’t assist us carry out any checks when utilizing kind assertions, which suggests you must know what you’re doing and be sure you’re doing what you need.

The any kind causes the TypeScript compiler to skip kind checking for this variable, which might be understood as an escape hatch into the TypeScript kind system, however most often, it is too lenient. However, values of kind unknown should be narrowed right down to a selected kind earlier than most operations are carried out, which frequently means safer and extra sturdy.

More Posts