我想创建一个函数,将T
类型的对象与T
中也找到的属性子集合并。例如,给出以下定义:
type Animal<Type: $Subtype<string>, Props: {}> = {
name: string,
type: Type,
} & Props;
type Cat = Animal<'CAT', {
fuzzy: boolean,
}>;
type Dog = Animal<'DOG', {
adventurous: boolean,
}>;
我希望有一个动物,它可以获取动物,动物的一些子属性,并返回另一个与输入动物的形状相匹配的物体。
我尝试了以下内容:
function augmentAnimal<T: Cat | Dog>(
animal: T,
augmentation: $Shape<T>,
): T {
return {
...animal,
...augmentation,
};
}
这给了我以下错误:
20: return { ^ object literal. Could not decide which case to select
16: function augmentAnimal<T: Cat | Dog>(
^ union type
我认为我很困惑的部分是让函数能够采用任何Animal类型,然后强制augmentation
参数的类型为$Shape<OnlyOneAnimal>
而不是$ Shape`。
我可以为每只动物单独创建增强功能:
function augmentCat<T: Cat>(
cat: T,
catProps: $Shape<T>,
): T {
return {
...cat,
...catProps,
};
}
我似乎无法弄清楚更通用的版本。
注意:动物增强仅用于说明目的。在创建这个问题时,没有动物被增加或伤害。
答案 0 :(得分:1)
听起来像是对我的继承。接口会有帮助吗?
a[0]