Typescript slå sammen typer


Jeg har type A og type B

type A = {
    kind: "A",
    value: string,
    value2: string,
    value3: string,
};

type B = { kind: "B" } & A ;

Jeg vil skrive at B har alle egenskapene til typen A men med ulik kind-verdi

Men når jeg skriver dette

const temp: B = {
    kind: "B",
    value: "X",
    value2: "X2",
    value3: "X3",
};

Jeg får denne feilen

TS2322 type string kan ikke tilordnes til type never

Svar #1

Dette er fordi kind ikke kan være av typen «A» og «B» samtidig.

Måter å fikse på:

1. Generiske typer:

type WithKind<T extends string> = {
    kind: T,
    value: string,
    value2: string,
    value3: string,
}

type A = WithKind<"A">;

type B = WithKind<"B">;

2. Utelat:

type B = Omit<A, "kind"> & { kind: "B" } ;

Svar #2

Ditt problem stammer fra det faktum at

"A" & "B" === never

Hvis du vil overstyre en fast strengverdi med en ny, kan du først utelate den.

type B = { kind: "B" } & Omit<A, "kind">;

Relaterte artikler