Поток по умолчанию для неточных типов объектов;это означает, что, хотя объявлено, что Foo
явно имеет только одно (необязательное) свойство foo
типа number
, переменная типа Foo
теоретически может иметь дополнительные свойства.Например, переменная типа Foo
может иметь свойство bar
.И, поскольку bar
не введено в Foo
, тип bar
не ограничен (т. Е. Не обязательно number
).В результате, если вы должны были взаимодействовать с arg.bar
в process
и Flow позволял arg
иметь тип Foo
, вы не гарантированно будете взаимодействовать с number
.Таким образом, Flow жалуется.
Один из способов исправить это - использовать точные типы объектов.Если Flow знает, что переменная типа Foo
никогда не будет иметь свойства bar
, то она может быть безопасно передана в process
.Таким образом, вы можете набрать Foo
как:
type Foo = {|
+foo?: number,
|};
Try Flow
(Примечание: тип утилиты $ReadOnly
не является необходимым с приведенным выше определениемFoo
и исходное определение FooBar
, потому что bar
недоступно для записи. Хотя, конечно, хорошо хранить $ReadOnly
.)