Using Generics to Constrain Types
Learn how to use one generic type to apply a constraint on another type in TypeScript to improve type safety.
Construct a generic type from another
A generic type can be constructed out of another generic type. This technique essentially uses one type to apply a constraint on another type.
Let’s take a look at an example:
// Define a function named printProperty that takes two generic type parametersfunction printProperty<T, K extends keyof T>(object: T, key: K) {let propertyValue = object[key];console.log(`object[${key}] = ${propertyValue}`);}
Here, we have a function named printProperty that has two generic types named T and K.
The type K is constrained to be a value computed from the keyof operator on type T. Remember that the keyof operator will return a string literal type that is made up of the properties of an object, so K will be constrained to the property names of the type T.
The printProperty function has two parameters named object of type T, and key
of type K. The function assigns the value of the object’s property named in the key
parameter to a variable named propertyValue using the syntax object[key]. It then
logs this value to the console.
Let’s test this function as follows:
let obj1 = {id: 1,name: "myName",print() { console.log(`${this.id}`) }}printProperty(obj1, "id");printProperty(obj1, "name");printProperty(obj1, "surname");
-
On lines 1–5, we have constructed an object named
obj1, which has anidproperty of typenumber, anameproperty of typestring, and aprintfunction. -
On lines 7–9, we call the
printProperty...