Если я правильно понимаю проблему, GetEtType<T>
должен возвращать ключи типа сущности, выбранного его параметром универсального типа T
, который должен быть одним из shortname
значений, определенных в каждой сущности.
keyof Extract<...>
не работает, кажется, что keyof
применяется с готовностью в какое-то время при оценке условного типа, когда оно разрешается до never
.
После этого ответа , который говорит, какчтобы выбрать член различимого типа объединения на основе типа свойства дискриминанта, вот определение для GetEtType
, которое работает здесь:
type GetEtType<T extends Entities['shortname']>
= Entities extends (infer E)?
E extends Entities?
E['shortname'] extends T ? keyof E : never : never : never
;