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>();