我在TypeScript中遇到以下问题:
type Foo = {
a: number
}
type Bar = {
b: number
}
type Props = {
object?: Foo | Bar | null;
keys?: (keyof Foo)[] | (keyof Bar)[];
}
function myFunction({ object, keys = ['a'] }: Props) {
const values = keys.map(key => object && object[key]);
// Element implicitly has an 'any' type because expression of type '"a" | "b"' can't be used to index type 'Foo | Bar'.
// Property 'b' does not exist on type 'Foo | Bar'.
}
在这种情况下,输入可以是Foo类型,也可以是Bar类型,那么如何编写类型呢?
我试图构建一个抽象,它可以接收两个对象和从这些对象中选择的键。传入的对象可以是类型A或类型C。它们可以有无限个键,但调用者必须传入与传入的对象匹配的键。
2条答案
按热度按时间j5fpnvbx1#
Props
是坏的,因为它是,你没有区分Foo
和Bar
的 prop 。您可以使用泛型
现在我留下了
null
和可选输入,但是如果您打算从这个函数返回一些东西,我强烈建议您收紧您的API,否则用户将不得不进行各种检查7d7tgy0s2#
我建议歧视性婚姻。