Make all properties required in TypeScript


I have a type interface for shapes that looks something like this:

interface Shape {
height?: number;
width?: number;
}

Now I want to extend my interface for rectangles, but I want both height and width to be required. You can do that in TypeScript with a Required utility type.

Required takes a type and returns one with all required properties. You can use it by declaring a new type and passing the Shape interface:

type Rectangle = Required<Shape>

Now when I try to create a new rectangle, I can use the Rectangle type to ensure that I provided all the required properties:

const rect: Rectangle = {
height: 2,
width: 4
}

You can play around with these types in this TypeScript playground, and read more about Utility types on the TypeScript website.

Happy requiring!

About

My name is Sean McPherson (SeanMcP), and I am a software engineer based in Pittsburgh, PA. Here I write articles about programming for developers of all levels.