В настоящее время я сравниваю Google Closure Compiler и статический тип проверки Flow с точки зрения выразительности. Что мне нравится в последнем, так это то, что он, по-видимому, вполне может быть represent tagged unions. В руководстве приведен пример:Связанные с тегами объединения в компиляторе замыкания
type Result = Done | Error; // a disjoint union type with two cases
type Done = { status: 'done', answer: Matrix };
type Error = { status: 'error', message: string };
Есть ли способ сделать что-то подобное с помощью Closure Compiler? Это означает какой-то способ заставить определенные свойства объекта не только быть определенного типа, но иметь фиксированное значение? И использовать это значение для вывода типа, чтобы различать разные варианты в объединении? Я не нашел никакой документации по этому поводу.
Не знал, что можно использовать 'enum' как тип. Если я возьму вас на себя, обе формы, которые вы предлагаете, говорят, что свойство 'status' может быть одним из двух значений, не фиксируя связь между значением и соответствующим типом. Возможно, для этой цели будет использоваться один элемент 'enum' для каждого типа ... Вам придется немного поэкспериментировать с этим. – MvG
Можно использовать Enum с одним значением –