When to use `never` and `unknown` in TypeScript
This is an excerpt of a post that I wrote for LogRocket.
The never
and unknown
primitive types were introduced in TypeScript v2.0
and v3.0 respectively. These two types represent fundamental and
complementary aspects of type theory. TypeScript is carefully designed according
to principles of type theory, but it is also a practical language, and its
features all have practical uses – including never
and unknown
. To
understand those uses we will have to begin with the question, what exactly are
types?
Types explained using set theory
When you get down to a fundamental definition a type is a set of possible
values, and nothing more. For example, the type string
in TypeScript is the
set of all possible strings. The type Date
is the set of all instances of the
Date
class (plus all structurally-compatible objects), and the type
Iterable<T>
is the set of all objects that implement the iterable interface
for the given type of iterated values.
TypeScript is especially faithful to the set-theoretic basis for types; among
other features, TypeScript has union and intersection types. A type like string | number
is called a “union’ type because it literally is the union of the set
of all strings, and the set of all numbers.
» Read the rest on the LogRocket blog.