TS2344
Type '{ name: string; }' does not satisfy the constraint '{ age: number; }'. Property 'age' is missing in type '{ name: string; }' but required in type '{ age: number; }'.
Broken Code ❌
function increaseAge<T extends { age: number }>(data: T): T {
data.age += 1;
return data;
}
increaseAge<{ name: string }>({ age: 25, name: 'Benny' });Fixed Code ✔️
The "constraint" in this context is set by the T extends statement. When passing a type argument, the required properties of the type variable (T) must be matched:
function increaseAge<T extends { age: number }>(data: T): T {
data.age += 1;
return data;
}
increaseAge<{ age: number; name: string }>({ age: 25, name: 'Benny' });As an alternative, type argument inference can be used:
function increaseAge<T extends { age: number }>(data: T): T {
data.age += 1;
return data;
}
increaseAge({ age: 25, name: 'Benny' });