Learn TypeScript
Thinking of types as sets of values
Thinking of types as sets of values
In the next lesson, we will start to think about types in terms of sets of values. This will help us diagnose type errors.
Thinking about some primitive types as sets
A type is a possible set of values. For example, number is a set of all the possible numbers, and string is a set of all the possible strings. These examples are infinite sets because there is an endless number of possible numbers and strings.
A string literal type is a set of just one value. The following example is a finite set containing "Bob":
type Bob = "Bob";
Thinking about union and intersection types as sets
A union type is also a finite set. The following example can be thought of as a set of values containing "pending" and "completed":
type Status = "pending" | "completed";- Let's consider the union types below and think of them as sets of values:
type OrderStatus = "pending" | "completed";type DeliveryStatus = "completed" | "shipped";type Status = OrderStatus | DeliveryStatus;The image below is how we may think of the sets of values:
What value(s) will the Status type contain?
If we change the Status type to be the intersection of OrderStatus and DeliveryStatus, what value(s) will Status contain?
type Status = OrderStatus & DeliveryStatus;Thinking about the never and unknown types as sets
Let's turn our attention to a couple of special types in TypeScript, never and unknown.
What values does the never type contain?
What values does the unknown type contain?
Type narrowing
When understanding types of variables through code paths, the word narrowed is often used to describe the type's change.
Consider the example below:
function logStatus(status: string | null) { if (status) { console.log(status); }}- On line 2, the type of
statusisstring | null. - On line 3, the type of
statusisstring.
We can say TypeScript has narrowed the type of status on line 3. This is because the set of values has been reduced because the null value has been removed.
Summary
Thinking of types as sets of values can help us understand them better, particularly for union and intersection types.
In the next lesson, we will see how different types can be compatible.