@nskaskyou

Typescript Как проверить что в дженерик передается не пустой объект?

Привет всем.

Есть класс
сlass Test<T> {}
Каким образом можно сказать что T должен быть объектом и при этом как минимум с одним ключем?

Пока что есть только
сlass Test<T extends Record<string, any>> {}
но это не распознает пустой объект

Заранее спасибо
  • Вопрос задан
  • 187 просмотров
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
Параметр T ведь как-то будет использоваться в классе? Наверняка там есть поля с таким типом, или функции с параметром типа T? Иными словами, значения T будут как-то передаваться снаружи?

если да, то можно добавить проверку, которая превращает пустой объект в never и в итоге им нельзя пользоваться

type Check<T extends {}> = {} extends T ? never : T;

class Test<T extends {}> {
    func(x: Check<T>) {
        console.log(x);
    }
}

const obj = new Test<{}>();

obj.func({}); // ошибка TS
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы