Generic Constraints

Generic constraints in TypeScript allow you to specify the requirements for the type parameters used in a generic type. These constraints ensure that the type parameter used in a generic type meets certain requirements.

Constraints are specified using the extends keyword, followed by the type that the type parameter must extend or implement.

interface Lengthwise {
  length: number;
}

function loggingIdentity<T extends Lengthwise>(arg: T): T {
  // Now we know it has a .length property, so no more error
  console.log(arg.length);

  return arg;
}

loggingIdentity(3); // Error, number doesn't have a .length property
loggingIdentity({ length: 10, value: 3 }); // OK

In this example, the Lengthwise interface defines a length property. The loggingIdentity function uses a generic type parameter T that is constrained by the Lengthwise interface, meaning that the type parameter must extend or implement the Lengthwise interface. This constraint ensures that the length property is available on the argument passed to the loggingIdentity function.

Learn more from the following resources: