UNPKG

@edugouvfr/ngx-dsfr

Version:

NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).

63 lines (62 loc) 2.2 kB
export interface DsfrI18nBaseBundle { commons: object; alert: object; backtotop: object; breadcrumb: object; consent: object; date: object; display: object; email: object; follow: object; footer: object; franceConnect: object; header: object; link: object; login: object; modal: object; notice: object; pageResponse: object; pagination: object; password: object; response: object; select: object; share: object; stepper: object; table: object; tag: object; tel: object; toggle: object; tooltip: object; transcription: object; translate: object; upload: object; } /** * La définition du type ci-dessous est tronquée car Typescript 5.1-5.6 ne contrôle pas le type sortant d'une * déstructuration. Exemple simple avec le code ci-dessous (syntaxe utilisée au sein de I18nService#extendsLabelsBundle) * * type Foo = { foo : string }; * const foo = { foo:'toto' }; * const qux:Foo = { ...{ foo:'toto' }, ...{bar:'tutu'} }; */ export type DsfrI18nBundle = DsfrI18nBaseBundle; /** * Type permettant de contraindre les bundles d'extension. Permet d'empêcher l'écrasement des libellés existants. * * Explication : on utilise uen syntaxe en mapped types pour définir un type dont les clés sont des string et les * valeurs des objets (structure JSON) puis on ajoute que si la clé appartient aux cléés existantes alors le type * spécifié est never et comme never n'est pas un type possible en TS cela provoque une erreur de compilation. * Enfin on ajoute le point d'interrogation pour rendre optionnelle cette seconde contrainte sur le type des clés car * sinon le compilateur affiche une erreur car il considère que l'objet à assigner doit contenir la totalité des * propriétés de I18nBundle déclarées en type never (commons:never, alert:never, etc.) * * Compilation OK : * const ext: I18nExtensionBundle = { foo: { bar: 'qux' } }; * Compilation KO : * const ext: I18nExtensionBundle = { commons: { bar: 'qux' } }; */ export type DsfrI18nExtensionBundle = { [key: string]: object; } & { [key in keyof DsfrI18nBaseBundle]?: never; };