We can set constraints to Generic types. Constraints allow us to accept only certain types that can be passed as generic types.
Here is a generic function:
function mergeObject<T, U>(obj1: T, obj2: U) {
return Object.assign(obj1, obj2);
}
We want both arguments to be objects. Then only the function works properly. What if we are invoking the function as below:
mergeObject({ name: "Joby" }, 30);
In the above function, second argument is a number. That was not intended.
TypeScript provides a way to constraint the type of T
or U
. Here is how we restrict T
and U
to be an object.
function mergeObject<T extends object, U extends object>(obj1: T, obj2: U) {
return Object.assign(obj1, obj2);
}
Using the extends
keyword, we can make sure that the passed type is constrained to certain type.