TypeScript: types de fusion facultatifs
Sep 12 2020
J'ai le type aet le type b, mais cela devrait fonctionner avec n'importe quel nombre de types.
type a = {
first: number
}
type b = {
second: string
third: string
}
Je veux créer un type qui fusionne éventuellement tous ces types, donc s'il avait le secondchamp, il devrait également avoir le thirdchamp, mais il n'est pas nécessaire de les avoir tous les deux:
Bien:
const aa = {
first: 1,
second: "hi",
third: "hello"
}
const ab = {
first: 1
}
const ac = {
second: "hi",
third: "hello"
}
Mal:
const bb = {
first: 1,
second: "hi"
}
Comment définir un tel type?
Réponses
6 Lesiak Sep 12 2020 at 05:15
type None<T> = {[K in keyof T]?: never}
type EitherOrBoth<T1, T2> = T1 & None<T2> | T2 & None<T1> | T1 & T2
type abcombined = EitherOrBoth<a,b>
Voir un exemple plus élaboré sur: Les interfaces Typescript peuvent-elles exprimer des contraintes de cooccurrence pour les propriétés
Lien Playground
KaranKumar Sep 12 2020 at 05:01
Je ne sais pas si vous pourriez faire cela. Voici ce que je ferais:
Vous pouvez utiliser "|" opérateur lors de la définition d'une variable.
type a = {
first: number
}
type b = {
second: string
third: string
}
const test: a | b ={ first: 3, second: 'string'}