Javascript 流中的联合数组类型。属性在类型A中缺失,但在类型B中存在

Javascript 流中的联合数组类型。属性在类型A中缺失,但在类型B中存在,javascript,flowtype,Javascript,Flowtype,我如何告诉flow我正在使用一种或另一种类型 下面是我的问题的一个例子: /* @flow */ type Student = { role: string, }; type Teacher = { role: string, title: string }; const teachersArray: Array<Teacher> = [{role: 'teacher', title: 'mr' }]; const studentsArray: Array<S

我如何告诉flow我正在使用一种或另一种类型

下面是我的问题的一个例子:

/* @flow */

type Student = {
  role: string,
};

type Teacher = {
  role: string,
  title: string
};

const teachersArray: Array<Teacher> = [{role: 'teacher', title: 'mr' }];
const studentsArray: Array<Student> = [{role: 'student'}];

let dataArray: Array<Student | Teacher> = [];

let containerType = 'course'

if (containerType === 'course') {
  dataArray = teachersArray 
} else {
  dataArray = studentsArray
}

console.log(dataArray[0].title) // Cannot get `dataArray[0].title` because property `title` is missing in `Student` [1].
/*@flow*/
类型学生={
角色:字符串,
};
类型教师={
角色:字符串,
标题:字符串
};
constteachersarray:Array=[{role:'teacher',title:'mr'}];
常量studentsArray:Array=[{role:'student'}];
让dataArray:Array=[];
让containerType='course'
如果(containerType==='course'){
dataArray=teachersArray
}否则{
dataArray=studentsArray
}
console.log(dataArray[0].title)//无法获取`dataArray[0].title`,因为`Student`[1]中缺少属性`title`。
这是一张照片


我希望能够使用相同的
数据数组
,但flow不知道我使用的是哪一个。

使用扩展语法迫使flow以不同的方式检查类型。这不会引发任何错误:

if (containerType === 'course') {
  dataArray = [...teachersArray]
} else {
  dataArray = [...studentsArray]
}
然而,Flow在这里的错误是正确的:

dataArray[0].title

由于
dataArray
的类型是
Array
,因此无法确定
title
属性是否将在
dataArray
的第一个元素中定义,这太奇怪了<代码>常量c:Array=[{x:10},{y:20}]应触发相同的错误,但有效。还有,不管这是否是一个问题,我认为正确的方法是,
学生
教师
都应该扩展另一个类,
数据数组
应该是该类的数组。否则,您可能会考虑改用接口。