Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 流要求对象具有以下属性之一_Javascript_Flowtype - Fatal编程技术网

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"
  }
}