如何告诉流程我使用的是其中一种?
这是我的问题的一个例子:
/* @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].
这是一个try flow url。
我希望能够使用相同的dataArray
,但流程不知道我正在使用哪一个。
使用扩展语法强制Flow以不同的方式检查类型。这不会引发任何错误:
if (containerType === 'course') {
dataArray = [...teachersArray]
} else {
dataArray = [...studentsArray]
}
但是,Flow在这里是错误的:
dataArray[0].title
由于dataArray
的类型是Array<Student|Teacher>
,你不能确定title
属性将在dataArray
的第一个元素中定义。