为什么这会发生在 typescript 中?(联合类型)[重复]

7gcisfzg  于 2023-05-19  发布在  TypeScript
关注(0)|答案(1)|浏览(123)

此问题已在此处有答案

Why does A | B allow a combination of both, and how can I prevent it?(3个答案)
昨天关门了。
这可能是重复的,但我找不到答案。
我有这种类型:

type A = {
    prop2: string;
    prop1: string;
} | {
    prop3: string;
    prop1: string;
}

正如你所看到的,它有一个共享的 prop 和两个不同的 prop 。但是我可以这样使用它:

const a: A = {
  prop1: '',
  prop2: '',
  prop3: '',
};

而且它起作用了!
但是接下来我需要检查a是否有prop 2和prop 3来使用它:

a.prop1 = '';
// @ts-expect-error
a.prop2 = ''; // ERROR
if ('prop2' in a) {
  a.prop2 = ''; // OK
}

为什么typescript允许我声明两个props?我希望它和使用变量时一样严格。最初的例子是一个React组件,它让我传递所有的props。
顺便说一句,我不能添加一个prop 4,只有1,2和3。

kgqe7b3p

kgqe7b3p1#

在2023年,这仍然是一个相关的问题,没有一个真实的可以接受的答案,不需要一些复杂的工作。This one by jcalz应该可以帮助您。

相关问题