DEV Community

Cover image for Type Annotations and Inference in Typescript
Himanshu Khaitan
Himanshu Khaitan

Posted on

Type Annotations and Inference in Typescript

Let's first see what Types are in Typescript.

Types are the easy way to refer the different properties and functions available to a value in the Typescript Code.

For eg: A vehicle of type Bike had certain properties such as two wheels whereas a vehicle of type Car has four wheels in general.

Type Annotations

It is the code we add to the Typescript to make the compiler aware of the type of values variable will refer to.

let age : number = 20;
let name: string = "Himanshu";
let isAdult: boolean = true;
Enter fullscreen mode Exit fullscreen mode

In the example above, we explicitly tell the typescript compiler that the variable age will be of type number, name will be of type string and isAdult would be of type boolean.

Type Annotations for Variables

let likes : number = 100;
let title: string = "Type Annotations and Inference"
let isPublished : boolean = true;
Enter fullscreen mode Exit fullscreen mode

In the above case, we as a developer have explicitly told the types of TypeScript Compiler. It's not recommended to do this as Type Inference is capable to infer they types of variables which are declared and intialized in same expression.

Type Annotations for Arrays

let skills: string[] = ["DSA", "Graphic Design", "Web Dev"];
Enter fullscreen mode Exit fullscreen mode

Here we let TypeScript Compiler know that skills will be an Array consisting of strings.

Type Annotations for Functions

const add = (a: number; b: number) : string => {
   return `${a + b}`
Enter fullscreen mode Exit fullscreen mode

For the function add we have defined a and b as parameters of type number and the return type as string.

Syntax is a bit confusing but easy to get hands on it.

Custom Type Annotations

interface Book {
 name: string;
 copies: number;
 publishedOn: Date;

let book1: Book = { name: "Do or Die", copies: 100, publishedOn: };

let author: {name: string; likes: number};

author = {name: "Naval", likes: 100};

Enter fullscreen mode Exit fullscreen mode

In the above written snippet there are two cases

-> Using Interface

In this, we defined a custom data type Book which has name, publishedOn and copies as it's properties and assigned it to book1 variable.

-> Inline Definition

In this, we defined the type of variable author inline using the syntax shown above.

Both of the methods can be used to define the custom types depending on the used cases.

Multiple types

In some of the used cases we are not sure of the type of variable or we can have a variable which may contain two types of values.

let variableOne: any;

let variableTwo: number | string;

Enter fullscreen mode Exit fullscreen mode

In case of variableOne we are not sure of it's type so we assigned the type any to it. Defining type any is not preferred as TypeScript will infer it if not explicitly told.

In case of variableTwo, it can contain values which are either string or number, so we used the | operator to explicitly tell the TypeScript Compiler.

Type Inference

Type Inference happens when TypeScript tries to infer what type of values a variable refers to.

Type Inference

In the above example TypeScript Compiler infers that num will be of type number.

Type Inference in Functions

TypeScript is only capable of inferring the return type of a function. Parameters need to be annotated by the developer.

const add = (a: number; b: number) => {
return a+b;
Enter fullscreen mode Exit fullscreen mode

In the above example TypeScript will infer the return type of function as number based on the type of parameters used and operations performed.

When to use Type Annotations

  • Fixing type any
  • Where Inference doesn't work
  • Delayed Initialization

Note: Whenever TypeScript can't infer the type of a variable or a function, it simply declares its type to be any.

Thanks for reading the Blog. Hope you found it Helpful

GitHub logo himakhaitan / himakhaitan

Happily Turning Coffee into Code☕💻. The repository is a quick overview of my current skills and commits🌱

I write code, build communities and love to interact with people around.


An avid and passionate coder specializing in different languages. I love to build and design websites which the end user would enjoy using while keeping the website performant and the code clean. Up for freelance web development work, social media managment and collaborating on exciting Open Source & Personal projects.

Currently I am learning advanced concepts of Typescript and getting hands dirty in Competitive Programming.

Stuff I Know



- Profile Visits -

Happily turning coffee into code!

My self Himanshu Khaitan, a Freelance Web Developer. You can connect with me here. 😍

You can follow me on Twitter or connect with me on LinkedIn 🔗

You can ping me for help on my Discord Server here.

Top comments (0)