Flow中的Union Array类型。类型A中缺少属性,但存在于类型B中

问题描述 投票:1回答:1

如何告诉流程我使用的是其中一种?

这是我的问题的一个例子:

/* @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,但流程不知道我正在使用哪一个。

javascript flowtype
1个回答
0
投票

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

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

但是,Flow在这里是错误的:

dataArray[0].title

由于dataArray的类型是Array<Student|Teacher>,你不能确定title属性将在dataArray的第一个元素中定义。

© www.soinside.com 2019 - 2024. All rights reserved.