Я пытался сделать что-то вроде этой работы. Дело в том, что у меня есть какой-то Interface, а затем Goo класс, который имеет один универсальный тип, расширяющий указанный интерфейс.
interface Interface { a: string; }
class Goo<T extends Interface> { props: T }
class Foo<T extends Goo<T["props"]>> {}
Я хотел бы создать класс Foo, который принимает универсальный тип, расширяющий этот универсальный Goo. Проблема в том, что Goo ожидает общий аргумент, для которого я пытался использовать T["props"], но средство проверки синтаксиса показывает ошибку, что этот тип не удовлетворяет интерфейсу.
Использование указанного класса будет выглядеть примерно так:
class Impl implements Interface { a: string; }
type Boo = Foo<Goo<Impl>>;
Да, это действительно работает и не сужает тип до интерфейса в более сложных случаях.
Если есть некоторые варианты использования, для которых предложение не работает, не могли бы вы отредактировать свой вопрос, включив в него минимальный пример?
Предложенное решение от @series0ne работает, но я не уверен, как закрыть эту проблему, поскольку это просто комментарий, а не ответ.
Я добавил это как ответ






Вы могли бы просто сделать это
class Foo<T extends Goo<Interface>> {}
А как насчет
class Foo<T extends Goo<Interface>> {}?