Learn Typescript

At learntypescript.app, our mission is to provide a comprehensive and accessible resource for individuals who want to learn Typescript. We believe that Typescript is a powerful tool for building scalable and maintainable applications, and we are committed to helping people of all skill levels master this language.

Through our website, we aim to provide high-quality educational content, including tutorials, articles, and videos, that cover all aspects of Typescript. We strive to make our content engaging, interactive, and easy to understand, so that learners can progress at their own pace and achieve their goals.

We are dedicated to fostering a supportive and inclusive community of learners, where people can connect with each other, share their experiences, and collaborate on projects. We believe that learning is a lifelong journey, and we are committed to providing ongoing support and resources to help our users continue to grow and develop their skills.

At learntypescript.app, we are passionate about helping people unlock the full potential of Typescript, and we are excited to be a part of the growing community of developers who are embracing this language.

Video Introduction Course Tutorial

/r/typescript Yearly

TypeScript Cheatsheet

This cheatsheet is designed to help you get started with TypeScript, a popular programming language that adds static typing to JavaScript. It covers the key concepts, topics, and categories related to TypeScript, as well as some tips and tricks to help you become a better TypeScript developer.

Table of Contents

Introduction to TypeScript

TypeScript is a superset of JavaScript that adds static typing, classes, interfaces, and other features to the language. It was developed by Microsoft and is now an open-source project with a large and active community.

TypeScript is designed to help developers write more robust and maintainable code by catching errors at compile-time rather than at runtime. It also provides better tooling and IDE support, making it easier to work with large codebases.

To get started with TypeScript, you'll need to install it on your machine. You can do this using npm, the Node.js package manager:

npm install -g typescript

Once you have TypeScript installed, you can create a new TypeScript file with the .ts extension and start writing code.

Basic Types

TypeScript provides several basic types that you can use to define variables and function parameters:

Here's an example of how to define variables with these types:

let num: number = 42;
let str: string = "hello";
let bool: boolean = true;
let nul: null = null;
let undef: undefined = undefined;
let nothing: void = undefined;
let anyValue: any = "anything";


In TypeScript, you can define variables using the let or const keywords. let is used for variables that can be reassigned, while const is used for variables that are read-only.

let x: number = 42;
const y: string = "hello";

You can also define variables without specifying their type, in which case TypeScript will infer the type based on the value:

let z = 42; // inferred type: number
const w = "hello"; // inferred type: string


Functions in TypeScript can have typed parameters and return values, making it easier to catch errors at compile-time. Here's an example of a function that takes two numbers and returns their sum:

function add(x: number, y: number): number {
  return x + y;

You can also define optional parameters by adding a question mark after the parameter name:

function greet(name?: string): string {
  if (name) {
    return `Hello, ${name}!`;
  } else {
    return "Hello!";

And you can define default parameter values by using the equals sign:

function repeat(str: string, times: number = 2): string {
  return str.repeat(times);


Classes in TypeScript are similar to classes in other object-oriented languages, with properties and methods that can be accessed and modified. Here's an example of a class that represents a person:

class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;

  greet() {
    console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);

You can create an instance of a class using the new keyword:

const john = new Person("John", 42);
john.greet(); // logs "Hello, my name is John and I'm 42 years old."


Interfaces in TypeScript define the shape of an object, specifying the properties and their types. Here's an example of an interface that represents a person:

interface Person {
  name: string;
  age: number;

You can use interfaces to define the types of function parameters and return values:

function greet(person: Person): string {
  return `Hello, my name is ${person.name} and I'm ${person.age} years old.`;

And you can use interfaces to define the types of class properties:

class Person {
  name: string;
  age: number;

  constructor(person: Person) {
    this.name = person.name;
    this.age = person.age;


Enums in TypeScript allow you to define a set of named constants, making your code more readable and maintainable. Here's an example of an enum that represents the days of the week:

enum DayOfWeek {

You can use enums in switch statements and other control flow structures:

const day = DayOfWeek.Monday;

switch (day) {
  case DayOfWeek.Monday:
    console.log("It's Monday!");
  case DayOfWeek.Tuesday:
    console.log("It's Tuesday!");
  // ...


Generics in TypeScript allow you to define functions and classes that can work with a variety of types, making your code more flexible and reusable. Here's an example of a generic function that takes an array of any type and returns the first element:

function first<T>(arr: T[]): T {
  return arr[0];

You can use generics to define classes that work with a variety of types:

class Stack<T> {
  private items: T[] = [];

  push(item: T) {

  pop(): T {
    return this.items.pop();


Modules in TypeScript allow you to organize your code into separate files and namespaces, making it easier to manage and reuse. Here's an example of a module that exports a function:

export function greet(name: string): string {
  return `Hello, ${name}!`;

You can import modules using the import keyword:

import { greet } from "./greet";

console.log(greet("John")); // logs "Hello, John!"

Type Inference

TypeScript uses type inference to automatically determine the types of variables and expressions based on their usage. This can save you time and make your code more readable:

let x = 42; // inferred type: number
const y = "hello"; // inferred type: string

function add(x: number, y: number) {
  return x + y; // inferred return type: number

Type Compatibility

TypeScript uses a system of structural typing to determine if two types are compatible, based on their properties and methods. This allows you to write more flexible and reusable code:

interface Person {
  name: string;
  age: number;

interface Employee {
  name: string;
  age: number;
  salary: number;

const john: Person = { name: "John", age: 42 };
const jane: Employee = { name: "Jane", age: 35, salary: 50000 };

john = jane; // valid assignment
jane = john; // invalid assignment

Advanced Types

TypeScript provides several advanced types that can help you write more expressive and powerful code:

Here's an example of a union type that represents a variable that can be either a string or a number:

let x: string | number = "hello";
x = 42;


Decorators in TypeScript allow you to add metadata and behavior to classes and their members, making it easier to write reusable and extensible code. Here's an example of a decorator that logs a message when a method is called:

function log(target: any, key: string, descriptor: PropertyDescriptor) {
  const originalMethod = descriptor.value;

  descriptor.value = function (...args: any[]) {
    console.log(`Calling ${key} with arguments ${args}`);
    return originalMethod.apply(this, args);

  return descriptor;

class Calculator {
  add(x: number, y: number) {
    return x + y;

const calc = new Calculator();
calc.add(2, 3); // logs "Calling add with arguments 2,3"

TypeScript Tools

TypeScript comes with several tools and libraries that can help you write, test, and debug your code:


TypeScript is a powerful and flexible programming language that can help you write more robust and maintainable code. By understanding the key concepts and features of TypeScript, you can become a more effective and efficient developer. This cheatsheet is just a starting point, so be sure to explore the TypeScript documentation and community to learn more.

Common Terms, Definitions and Jargon

1. TypeScript - A superset of JavaScript that adds optional static typing and other features to the language.
2. Static Typing - A type system where types are checked at compile-time rather than runtime.
3. Dynamic Typing - A type system where types are checked at runtime rather than compile-time.
4. Compiler - A program that translates source code into machine code or another form of executable code.
5. JavaScript - A high-level, dynamic, interpreted programming language that is widely used for web development.
6. ECMAScript - A standardized version of JavaScript that defines the language syntax and features.
7. Type Inference - The ability of a compiler to automatically deduce the type of a variable based on its usage.
8. Type Annotation - A syntax for explicitly specifying the type of a variable or function parameter in TypeScript.
9. Interface - A TypeScript construct that defines a contract for an object's properties and methods.
10. Class - A TypeScript construct that defines a blueprint for creating objects with properties and methods.
11. Constructor - A special method in a class that is called when an object is created.
12. Inheritance - A mechanism in TypeScript where a class can inherit properties and methods from another class.
13. Polymorphism - A concept in object-oriented programming where objects of different classes can be treated as if they were of the same class.
14. Encapsulation - A concept in object-oriented programming where the implementation details of a class are hidden from the outside world.
15. Access Modifiers - Keywords in TypeScript that control the visibility of class members.
16. Public - A keyword in TypeScript that makes a class member visible to all code.
17. Private - A keyword in TypeScript that makes a class member visible only within the class.
18. Protected - A keyword in TypeScript that makes a class member visible within the class and its subclasses.
19. Abstract Class - A TypeScript class that cannot be instantiated directly and must be subclassed.
20. Namespace - A TypeScript construct that provides a way to organize code into logical groups.

Editor Recommended Sites

AI and Tech News
Best Online AI Courses
Classic Writing Analysis
Tears of the Kingdom Roleplay
Build packs - BuildPack Tutorials & BuildPack Videos: Learn about using, installing and deploying with developer build packs. Learn Build packs
Developer Wish I had known: What I wished I known before I started working on programming / ml tool or framework
Flutter Design: Flutter course on material design, flutter design best practice and design principles
Macro stock analysis: Macroeconomic tracking of PMIs, Fed hikes, CPI / Core CPI, initial claims, loan officers survey
Datalog: Learn Datalog programming for graph reasoning and incremental logic processing.