@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
TypeScript
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;
};