Javascript 流要求对象具有以下属性之一
我有一个对象,它应该包含一个名为Javascript 流要求对象具有以下属性之一,javascript,flowtype,Javascript,Flowtype,我有一个对象,它应该包含一个名为school的键或一个名为company的键,我不想“只是”将它们都标记为可选,而是说“一个或另一个” 我尝试了以下几点: type schoolType = { id: string, name: string } type companyType = { id: string, name: string, } type place = { start: Date, end: Date, (company|sch
school
的键或一个名为company
的键,我不想“只是”将它们都标记为可选,而是说“一个或另一个”
我尝试了以下几点:
type schoolType = {
id: string,
name: string
}
type companyType = {
id: string,
name: string,
}
type place = {
start: Date,
end: Date,
(company|school): companyType | schoolType
}
无法更改keyname,因为对象是从后端提交的编辑:根据您在下面的评论中所说的,更好的解决方案是:
type place = {
start: Date,
end: Date,
company?: companyType,
school?: schoolType
}
因为你永远不知道它是学校类型还是公司类型。一旦你弄清楚那是什么,你可以稍后将它转换成它的实际类型
你可以这样做
…place
只是为了节省一些输入。如果您不熟悉,它的工作原理与对象传播完全相同
虽然可能没有意义,因为
学校类型
和公司类型
是相同的,因此你无法区分这两种类型。。但是流量检查器仍然会抱怨a是否做了类似这样的事情:const a=place.school?place.school.id:place.company.id
它说无法获取“place.company.id”,因为未知类型的属性“company”中缺少属性“id”
@VeXii。让我来处理一下,然后再给你回复。谢谢,我真的不必这么做,因为我还需要做一个可疑的检查来满足流量检查的要求
type schoolType = {
id: string,
name: string
}
type companyType = {
id: string,
name: string,
}
type place = {
start: Date,
end: Date,
}
type placeWithCompany = {
...place,
company: companyType
}
type placeWithSchool = {
...place,
school: schoolType
}
type places = placeWithCompany | placeWithSchool
const school: places = {
start: new Date(),
end: new Date(),
school: {
id: "1",
name: "2"
}
}
const company: places = {
start: new Date(),
end: new Date(),
company: {
id: "1",
name: "2"
}
}