Вы должны использовать фактический сопоставленный тип с синтаксисом {[K in keyof T]: ...}
, а затем посмотреть его свойства:
export type Entries<T> = { [K in keyof T]: [K, T[K]] }[keyof T][];
type E = Entries<{ first: number; second: string }>;
// type E = (["first", number] | ["second", string])[]
Вы можететакже используйте дистрибутивный условный тип , подобный этому, для работы которого требуется псевдоним вспомогательного типа:
type EntriesHelper<T, K> = K extends keyof T ? [K, T[K]] : never;
type Entries<T> = Array<EntriesHelper<T, keyof T>>;
type E = Entries<{ first: number; second: string }>;
// type E = (["first", number] | ["second", string])
или подобный этому, который вместо логического вывода использует в условных типах хелпера:
type Entries<T> = Array<
keyof T extends infer K ? (K extends keyof T ? [K, T[K]] : never) : never
>;
type E = Entries<{ first: number; second: string }>;
// type E = (["first", number] | ["second", string])[]
Они все выдают здесь один и тот же результат, но могут действовать по-разному, учитывая необязательные свойства или другой крайний случай, поэтому будьте осторожны.Надеюсь, это поможет;удачи!
Ссылка на код