79

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 |?

0

2 Answers 2

107

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Looks like the links to the spec are outdated. Can be found here typescriptlang.org/docs/handbook/…
9

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?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.