Typescript類型體操 - ObjectEntries

題目

中文

實現 Object.entries 的類型版本

示例:

interface Model {
    name: string;
    age: number;
    locations: string[] | null;
}
type modelEntries = ObjectEntries<Model>; // ['name', string] | ['age', number] | ['locations', string[] | null];

English

Implement the type version of Object.entries

For example

interface Model {
    name: string;
    age: number;
    locations: string[] | null;
}
type modelEntries = ObjectEntries<Model>; // ['name', string] | ['age', number] | ['locations', string[] | null];

答案

type ObjectEntries<
    T,
    R extends keyof T = keyof T,
    RequiredT = { [K in keyof T]-?: T[K] }
> = R extends keyof RequiredT
    ? [R, [RequiredT[R]] extends [never] ? undefined : RequiredT[R]]
    : never;

在線演示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章