Я не могу заставить полиморфные подтипы работать в массивах с обобщениями Flow, как в другом языке, таком как Java.
Обратите внимание на следующее.
interface Person {
name:string;
}
class Employee implements Person {
name:string;
badge:string;
}
interface Workplace {
people:Array<Person>;
}
class MyOffice implements Workplace {
people:Array<Employee>; // ERROR: Incompatible with Workplace.people
}
Это также может привести к сбою в Java;но у Java есть способ реализовать это правильно, указав, что массив people
в Workplace
будет содержать подтипы Person
.
interface Workplace {
people:Array<? extends Person>; // PSUEDO CODE: This is how Java supports subtypes
}
Мне не удалось найти сопоставимый механизм в Flow. Поток обсуждает дисперсию здесь: https://flow.org/en/docs/lang/variance/#toc-covariance и https://flow.org/en/docs/lang/depth-subtyping/
Что говорит о том, что должно работать следующее:
interface Workplace {
people:Array<+Person>;
}
Но этот синтаксис не работает.
Есть ли способ в Flow объявить ковариантный тип Array?