TypeScript Cheat Sheet
TypeScript is a statically typed superset of JavaScript that adds a powerful type system and tooling. This TypeScript cheatsheet is an example-driven reference covering core syntax, types, interfaces, generics, classes, and asynchronous programming.
Running TypeScript
tsc app.ts
node app.js
ts-node app.ts
Variables & Type Annotations
let a: number = 10;
const b: string = "text";
let c = 20; // inferred
Basic Types
number
string
boolean
null
undefined
symbol
bigint
let ok: boolean = true;
Arrays
let nums: number[] = [1, 2, 3];
let strs: Array<string> = ["a", "b"];
Tuples
let t: [number, string] = [1, "a"];
Enums
enum Status {
OK,
ERROR,
LOADING,
}
let s: Status = Status.OK;
Any / Unknown
let a: any = 10;
let u: unknown = "text";
if (typeof u === "string") {
u.length;
}
Void / Never
function log(msg: string): void {
console.log(msg);
}
function fail(): never {
throw new Error("fail");
}
Union Types
let id: number | string;
function print(v: number | string) {
if (typeof v === "string") {
v.toUpperCase();
}
}
Intersection Types
type A = { a: number };
type B = { b: number };
type C = A & B;
Literal Types
let dir: "left" | "right";
Type Aliases
type User = {
name: string;
age: number;
};
Interfaces
interface User {
name: string;
age: number;
}
interface Admin extends User {
role: string;
}
Optional & Readonly
interface Config {
readonly id: string;
timeout?: number;
}
Functions
function add(a: number, b: number): number {
return a + b;
}
const sum = (a: number, b: number): number => a + b;
Function Types
type Op = (a: number, b: number) => number;
Default & Rest Parameters
function multiply(a: number, b: number = 2): number {
return a * b;
}
function total(...nums: number[]): number {
return nums.reduce((a, b) => a + b, 0);
}
Type Assertions
const v: unknown = "text";
const len = (v as string).length;
const len2 = (<string>v).length;
Objects
const user: User = {
name: "A",
age: 20,
};
Classes
class Counter {
private value: number = 0;
increment(): void {
this.value++;
}
get(): number {
return this.value;
}
}
Inheritance
class Animal {
speak(): void {}
}
class Dog extends Animal {}
Access Modifiers
public
private
protected
readonly
Abstract Classes
abstract class Shape {
abstract area(): number;
}
Implements
interface Logger {
log(msg: string): void;
}
class ConsoleLogger implements Logger {
log(msg: string): void {
console.log(msg);
}
}
Generics
function identity<T>(value: T): T {
return value;
}
const v = identity<number>(10);
Generic Constraints
function lengthOf<T extends { length: number }>(v: T): number {
return v.length;
}
Utility Types
Partial<User>
Required<User>
Readonly<User>
Pick<User, "name">
Omit<User, "age">
keyof / typeof
type Keys = keyof User;
const obj = { a: 1, b: 2 };
type Obj = typeof obj;
Index Signatures
interface Dict {
[key: string]: number;
}
Discriminated Unions
type Result =
| { type: "ok"; value: number }
| { type: "error"; message: string };
function handle(r: Result) {
switch (r.type) {
case "ok":
return r.value;
case "error":
return r.message;
}
}
Modules
export function add(a: number, b: number): number {
return a + b;
}
import { add } from "./math";
Namespaces
namespace MathUtil {
export function add(a: number, b: number): number {
return a + b;
}
}
Async / Await
async function fetchValue(): Promise<number> {
return 42;
}
const v = await fetchValue();
Promises
const p: Promise<number> = Promise.resolve(10);
Error Handling
try {
throw new Error("fail");
} catch (e) {
}
DOM Types
const el = document.querySelector("#id") as HTMLElement;