Не знаю, как сформулировать вопрос, потому что я не уверен, что это возможно, или если у него есть лучшая терминология, но вот идея:
Допустим, у вас есть тип утилиты, такой как:
type Unpack<T, K> = K extends keyof T ? T[K] : never;
// ☝️ gets a nested type from a given object type/interface
И тип или интерфейс, с которым вы используете его, например:
type ABC = { a: string, b: boolean, c: number }
С помощью утилиты легко создавать новые типы:
type TypeofA = Unpack<ABC, 'a'>
// ☝️ TypeofA = string
Но можем ли мы составить утилиту с тип уже введен?
type Unpacker<T> = unknown // <- what goes here? ?♂️
type UnpackABC = Unpacker<ABC> // <- to use like this
Тогда он будет многократно использоваться без ссылки на тип AB C ...
type A = UnpackABC<'a'> // string
type B = UnpackABC<'b'> // boolean
type C = UnpackABC<'c'> // number