A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://www.geeksforgeeks.org/typescript/typescript-generic-constraints/ below:

TypeScript Generic Constraints - GeeksforGeeks

TypeScript Generic Constraints

Last Updated : 04 Sep, 2024

In TypeScript, generic constraints restrict the types that can be used with a generic type by using the extends keyword. This ensures that the generic type adheres to a specific structure or interface, allowing access to certain properties or methods within the generic type.

What are Generic Constraints? Syntax:
function genericConstraintFunction<T extends GenericConstraintType>(param: T): void {
    // ...
}

Where-

Example 1: In this example, the Sports interface has a name property. The printSportName function uses extends to ensure its argument conforms to the Sports type before execution.

JavaScript
// Define Sports interface with a name property
interface Sports {
    name: string;
}

// Function to print sport name, ensuring T extends Sports
function printSportName<T extends Sports>(sport: T): void {
    console.log(sport.name);
}

// Create a sport object of type Sports
let sport: Sports = { name: "baseball" };

// Call function with sport object
printSportName(sport);

Output:

baseball

Example 2: In this example, we use extends keyof to ensure that the generic type parameter K is a key of type T. This enforces that K is a valid property of T.

JavaScript
interface Sports {
    name: string;
    players: number;
}

function getNumberOfPlayers<T extends Sports, K extends keyof T>
(sport: T, players: K): T[K] {
    return sport[players];
}

let sport: Sports = { name: "baseball", players: 9 };

// 'players' is inferred as a number
let players: number = getNumberOfPlayers(sport, 'players');
console.log(`Number of Players are : ${players}`);

Output:

Number of Players are : 9

Example 3: In this example, we ensure that the generic type parameter class object implements a specific interface.

JavaScript
interface Sports {
    name: string;
    players: number;
    getNumberOfGloves(): number;
}

class Baseball implements Sports {
    constructor(public name: string, public players: number) { }

    getNumberOfGloves(): number {
        return this.players * 2;
    }
}

function getNumberOfGloves<T extends Sports>(sport: T): void {
    console.log(`Number of Gloves required are : 
        ${sport.getNumberOfGloves()}`);
}

let baseball = new Baseball("baseball", 9);
getNumberOfGloves(baseball);

Output:

Number of Gloves required are : 18


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4