I'm struggling to find the definition of the &
operator in TypeScript. I have recently come across the following code:
type IRecord<T> = T & TypedMap<T>;
What does that operator do, and how is it different from the union type |
?
I'm struggling to find the definition of the &
operator in TypeScript. I have recently come across the following code:
type IRecord<T> = T & TypedMap<T>;
What does that operator do, and how is it different from the union type |
?
This looks like it's from the Intersection Types portion of the Language Specification. Specifically, the &
is an intersection type literal. As for what it does:
Intersection types represent values that simultaneously have multiple types. A value of an intersection type A & B is a value that is both of type A and type B. Intersection types are written using intersection type literals (section 3.8.7).
The spec goes on to offer a helpful snippet to better understand the behavior:
interface A { a: number }
interface B { b: number }
var ab: A & B = { a: 1, b: 1 };
var a: A = ab; // A & B assignable to A
var b: B = ab; // A & B assignable to B
Because ab
is both of type A
and of type B
, we can assign it to a
and/or b
. If ab
were only of type B
, we could only assign it to b
.
The code you shared may be from this comment on GitHub, which mentions Intersection Types.
Worth noting that if you'd prefer to use interfaces over types (although they're largely similar) that you can typically use interface extension instead of type intersection like this:
// base type
interface Shape {
color: string;
}
// extension
interface Square extends Shape {
sideLength: number;
}
// intersection
type Square = Shape & {
sideLength: number;
}
See Also: Difference between extending and intersecting interfaces in TypeScript?
© 2022 - 2024 — McMap. All rights reserved.