打字稿合并类型

时间:2019-12-29 06:58:18

标签: typescript

我的类型为A,类型为B

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

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

我要输入的B具有A类型的所有属性,但具有不同的kind

但是当我写这篇文章

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

我收到此错误

  

TS2322类型string无法分配给类型never

2 个答案:

答案 0 :(得分:2)

您的问题源于以下事实

"A" & "B" === never

如果要用新的值覆盖固定的字符串值,可以先Omit

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

答案 1 :(得分:2)

这是因为kind不能同时属于“ A”和“ B”类型。

解决方法:

1。泛型:

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

type A = WithKind<"A">;

type B = WithKind<"B">;

2。忽略:

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