【发布时间】:2020-04-04 11:53:24
【问题描述】:
我有一个接收两种类型交集的函数:
interface A {
propA: string;
}
interface B {
propB: number;
propC: boolean;
}
function C(props: A & B) {
}
现在,在函数体内,我想从每个接口获取仅包含属性子集的对象;所以我想知道 Typescript 是否有任何实用程序来实现这一点:
function C(props: A & B) {
const a = fancyPicker<A>(props);
const b = fancyPicker<B>(props);
console.log(a);
// prints "{ propA: "some string" }"
console.log(b);
// prints "{ propB: 42, propC: false }"
}
【问题讨论】:
-
fancyPicker不是类型系统的特性,而是Object.assign的运行时包装器。您可以使用keyof和Object.keys来执行此操作。 -
但是
keyof什么?如果我通过道具成功,我会得到所有,A&B。 -
@JuanDelaCruz 这能回答你的问题吗? stackoverflow.com/questions/50839597/…
-
A & B是两种类型的intersection,而不是union。 -
不,正如您所写的那样,您的要求是不可能的。考虑
fancyPicker<A>(props)和fancyPicker<B>(props)都将编译为相同的JavaScript 代码:fancyPicker(props)。
标签: reactjs typescript