There’s no reason to repeat a default type unless it is early in a list and other, non-default types come after it. Instead, leave it out and only
supply type when it is something other than the default.
Noncompliant code example
function foo<N = number, S = string>() {}
foo<number, string>(); // Noncompliant; both types redundant
foo<string, string>(); // Noncompliant; 2nd string is redundant
foo<number, number>(); // Ignored; number is redundant but required
Compliant solution
function foo<N = number, S = string>() {}
foo();
foo<string>();
foo<number, number>();