фига себе! не знал что выражение справа от extends может зависеть от T...
если нужно ещё проверять, что T - объект, то Check будет таким
class Test<T extends [T] extends [object]
? Record<[keyof T] extends [never] ? 'Expected at least one property' : keyof T, unknown>
: never> {
class Test<T extends {
[Key in ([keyof T] extends [never] ? 'Expected at least one property' : keyof T)]: unknown
}> {
Именно это решение является верным для продакшена, т.к. легко читается и надёжно.
По поводу алгоритмической сложности, не хочу тебя шокировать, но "умножение" принято "отбрасывать". Собственно, заметно, что у тебя нет образования.
И да, жду от тебя решение с алгоритмической сложностью менее О(n^2).