如何仅从接口联合中的一种类型继承属性

时间:2020-04-08 08:51:52

标签: typescript interface union

如何使对象x仅具有ABC中的一个属性。当前,它可以具有所有属性abc,我只希望它成为其中一个,而没有另一个。

interface A {
  a: string;
}
interface B {
  b: string;
}
interface C {
  c: string;
}

type X = A | B | C;

const x: X = {
  a: 'a',
  b: 'b',
  c: 'c'
};

console.log(x); // returns { a: "a", b: "b", c: "c" }, should throw error.

打字稿版本-3.8.3

1 个答案:

答案 0 :(得分:0)

查看TypeScript文档(here),我不确定使用接口是否可以实现(我很可能错了)。但是我确实设法达到了您使用枚举所寻找的东西。

enum A {
  a = 'a'
}
enum B {
  b = 'b'
}
enum C {
  c = 'c'
}

type X = A | B | C;

const x: X = {
  a: 'a',
  b: 'b',
  c: 'c'
};
/* This does throw an error:
Type '{ a: string; b: string; c: string; }' is not assignable to type 'X'.
  Type '{ a: string; b: string; c: string; }' is not assignable to type 'C'.