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.
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
function foo<N = number, S = string>() {} foo(); foo<string>(); foo<number, number>();