typescript - Letar efter ett typesäkert sätt att flattena pojo


Jag letar efter en typdefinition som kan platta ut en typ som denna:

interface Model {
    name: string;
    address: {
        zipcode: string;
        street: string;
    };
    foo: {
        boo: {
            bar: number;
        }
    }
}

type FlatModel = Flatten<Model>
// ideally FlatModel should now look like this to the compiler
// {
//     name: string;
//     "address.zipcode": string;
//     "address.street": string;
//     "foo.boo.bar": number;
// }

Grundläggande konvertera en nästlad typ/gränssnitt till en typ med ett enda lager/nivå.