Member-only story

Advanced TypeScript: Mastering Complex Patterns and Features

krishankant singhal
5 min readSep 28, 2024

--

Welcome to the final installment of our TypeScript tutorial series! In this advanced guide, we’ll explore sophisticated TypeScript features and patterns that will take your development skills to the next level. We’ll dive into concepts like conditional types, mapped types, decorators, and more. Let’s get started!

## 1. Conditional Types

Conditional types allow you to create types that depend on other types. They’re particularly useful for creating flexible, reusable type definitions.


type IsArray<T> = T extends any[] ? true : false;
type WithArray = IsArray<string[]>; // true
type WithoutArray = IsArray<number>; // false
// More complex example
type Flatten<T> = T extends any[]
? T extends (infer U)[]
? U
: never
: T;
type Str = Flatten<string>; // string
type Num = Flatten<number>; // number
type StrArr = Flatten<string[]>; // string
type NumArr = Flatten<number[]>; // number

## 2. Mapped Types

Mapped types allow you to create new types based on old ones by transforming properties.


type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
type Partial<T> = {
[P in keyof T]?: T[P];
};
interface Person {
name: string;
age: number;
}
type ReadonlyPerson = Readonly<Person>;
// Equivalent to:
// {
// readonly name: string;
// readonly age: number;
// }
type PartialPerson = Partial<Person>;
// Equivalent to:
// {
// name?: string;
// age?: number;
// }

--

--

krishankant singhal
krishankant singhal

Written by krishankant singhal

Angular,Vuejs,Android,Java,Git developer. i am nerd who want to learn new technologies, goes in depth.

Responses (4)