TypeScript: Optionale Zusammenführungstypen

Sep 12 2020

Ich habe Typ aund Typ b, aber dies sollte mit einer beliebigen Anzahl von Typen funktionieren.

type a = {
    first: number
}

type b = {
    second: string
    third: string
}

Ich möchte einen Typ erstellen, der optional alle diese Typen zusammenführt. Wenn er also das secondFeld haben würde , sollte er auch das thirdFeld haben, aber er muss nicht beide haben:

Gut:

const aa = {
     first: 1,
     second: "hi",
     third: "hello"
}

const ab = {
     first: 1
}

const ac = {
     second: "hi",
     third: "hello"
}

Schlecht:

const bb = {
     first: 1,
     second: "hi"
}

Wie könnte ich einen solchen Typ definieren?

Antworten

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>

Ein ausführlicheres Beispiel finden Sie unter: Können Typescript-Schnittstellen Einschränkungen für das gleichzeitige Auftreten von Eigenschaften ausdrücken?

Spielplatz Link

KaranKumar Sep 12 2020 at 05:01

Ich bin mir nicht sicher, ob Sie das tun könnten. Das würde ich tun:

Sie könnten "|" verwenden Operator beim Definieren einer Variablen.

type a = {
    first: number
}

type b = {
    second: string
    third: string
}

const test: a | b ={ first: 3, second: 'string'}