是否可以从打字稿中的接口获取具有所有类型值的联合类型?
例如,当接口指定为
interface A {
a: string;
b: () => void;
c: number;
d: string;
e: 'something';
}
结果应该是
type B = string | () => void | number | 'something';
我什至不知道如何解决这个问题,即使有可能。
答案 0 :(得分:3)
例如,您可以使用keyof
type B = A[keyof A] // will be string | number | (() => void)
由于编译器无法区分类型something
和string
,因此不会出现类型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;