Объекты в настоящее время неточны по умолчанию в Flow (хотя команда указала, что это поведение может измениться). Это означает, что набрав
const teacher: Teacher = {
name: 'Alexa',
age: 41,
teacherId: 2,
studentId: 3
}
является полностью допустимым, поскольку имеет три обязательных свойства name
, age
и teacherId
. См. подтип ширины для получения дополнительной информации.
Чтобы заставить Flow предупреждать о дополнительных свойствах, вам нужно использовать точные объекты (обозначенные {| ... |}
). Flow теперь будет жаловаться на использование studentId
и teacherId
.
type Base = {|
name: string,
age: number
|}
type Teacher = {|
...Base,
teacherId: number,
|}
type Student = {|
...Base,
studentId: number
|}
type Person = Student | Teacher;
const person: Person = {
name: "John",
age: 20,
studentId: 000,
teacherId: 111
} // Fails
Try Flow