Constraints
Contraints são usados para limitar o tipo de um parâmetro de tipo. Por exemplo, se você quiser que um parâmetro de tipo seja um objeto, você pode usar a constraint object.
function printObject<T extends object>(obj: T) {
console.log(obj);
}Considere o exemplo abaixo, essa função aceita qualquer tipo.
function merge<U, V>(obj1: U, obj2: V) {
return {
...obj1,
...obj2
};
}Agora considere que queremos restringir a objetos, então:
function merge<U extends object, V extends object>(obj1: U, obj2: V) {
return {
...obj1,
...obj2
};
}Da mesma forma para dicionários:
function prop<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}