Typescript接口类型值转换为联合类型

时间:2019-04-25 14:41:16

标签: typescript

是否可以从打字稿中的接口获取具有所有类型值的联合类型?

例如,当接口指定为

interface A {
  a: string;
  b: () => void;
  c: number;
  d: string;
  e: 'something';
}

结果应该是

type B = string | () => void | number | 'something';

我什至不知道如何解决这个问题,即使有可能。

2 个答案:

答案 0 :(得分:3)

例如,您可以使用keyof

 type B = A[keyof A] // will be string | number | (() => void)

由于编译器无法区分类型somethingstring,因此不会出现类型something-因为两者都是字符串,它将在type B中省略。

答案 1 :(得分:1)

您需要的是高级打字稿。

下面的示例 A string |完全可以互换。 ()=>无效|编号“某物”; 。区别在于,如果您向A添加另一个属性,例如myfunc:string,则 A 的键将自动更新为 string |。 ()=>无效|编号| myfunc 。而且,您可以在诸如pluck这样的通用上下文中使用keyof,在这种情况下您可能无法提前知道属性名称。这意味着编译器将检查您是否传递了正确的属性名称集:

pluck(A, ['number ', 'unknown']); // error, 'unknown' is not in string | () => void | number | 'something';

可以

let B :keyof A;