Предположим, у меня есть следующий фрагмент кода:
interface Generic <S, T> {
_?: [S, T];
id: string;
...
}
interface A {}
interface B {}
interface C {}
interface D {}
type t1 = Generic<A, B>;
type t2 = Generic<B, C>;
Это код, который я не могу изменить (из другого пакета). Мой вопрос: есть ли способ программно узнать, что такое S и T для данного типа (например, t1, t2)?
У меня есть сильное подозрение, что, поскольку эта информация теряется после компиляции, я никогда не смогу выяснить, что такое S и T во время выполнения. Хуже того, я не смогу просмотреть детали t1 и t2 (как и в предыдущем вопросе).
Однако, поскольку я очень новичок в TypeScript, мне интересно, если я просто не знал, как правильно спросить, и в Интернете действительно есть ответ для меня.
Итак, возможно ли это? Как?
t1
иt2
— это абсолютно одинаковые типы, посколькуA
,B
,C
иD
— это идентичные пустые интерфейсы. Система типов TypeScript является структурной, а не номинальной. Два типа эквивалентны тогда и только тогда, когда они имеют одинаковую структуру, а не одно и то же имя. Это приведет к странному поведению, поэтому я бы посоветовал (даже в демонстрационных типах, подобных приведенным выше), добавить некоторые разные свойства, чтобы различать их. - person jcalz   schedule 20.03.2019