我对Flow相对较新,并试图围绕如何在我的应用程序中键入模型。
假设我有一个名为Car
的模型,其模型如下:
type Car = {
id: string,
make: string,
model: string,
owner?: ?{ name: string }
};
现在假设我的应用程序将创建一个汽车对象,但由于尚未保存,因此它没有其他必需的id
属性:
const newCar = {
make: 'Honda',
model 'Accord',
};
有没有办法轻松选择Car
的多个属性来分配给newCar
?
类似的东西:
const newCar: $Pick<Car, ['make', 'model']>;
?
或者在Flow中有更惯用的方法吗?
答案 0 :(得分:2)
您可以执行以下操作:
type Car = {
id: string,
make: string,
model: string,
owner?: ?{ name: string }
};
const newCar: $Diff<Car, { id: string }> = {
make: 'Honda',
model: 'Accord'
}
另一种方法非常相似(但我认为第一种方法使意图更清晰):
const newCar: { ...Car, id?: string } = {
make: 'Honda',
model: 'Accord'
}
如果你需要的只是移除id
,这非常有效。当您开始删除更多字段时,这可能会变得很麻烦。
答案 1 :(得分:0)
使用交集类型,您可以为已保存的实例指定基本类型和更具体的版本。
type UnsavedCar = {
make: string,
model: string,
owner?: ?{ name: string }
}
type Car = UnsavedCar & {
id: string;
}
在以下功能中也很有效:
function saveCar(car: UnsavedCar): Car { /* ... */ }