如何告诉流程我正在使用一种或另一种类型?
这是我的问题的一个例子:
/* @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
,但是流程不知道我正在使用哪个。
答案 0 :(得分:0)
使用传播语法会强制Flow以其他方式检查类型。这不会引发任何错误:
if (containerType === 'course') {
dataArray = [...teachersArray]
} else {
dataArray = [...studentsArray]
}
但是,Flow对于此处的错误是正确的:
dataArray[0].title
由于dataArray
的类型为Array<Student|Teacher>
,因此无法确定title
属性是否将在dataArray
的第一个元素中定义。