Union Fallthrough?

I'm transforming some input using morphs like so:
const weightUnit = type({
    value: 'number',
    unit: toStringUnion(weightAliasList),
})
    .pipe(({ value: fromValue, unit: fromUnit }) => {
        const stdUnit = weightAliases[fromUnit as StandardWeightUnit];
        const factor = standardUnitConversions.mg[stdUnit];
        const toValue = Math.ceil(fromValue * factor);
        return { value: toValue, unit: 'mg' };
    })
    .to({ value: 'number.integer', unit: '"mg"' });

And creating a union type like this, where
otherUnit.unit
is "string":
const normalizedUnit = weightUnit.or(volumeUnit).or(sizeUnit).or(otherUnit);

I expected
otherUnit
to catch non-matching values, but I'm getting this error:
ParseError: An unordered union of a type including a morph and a type with overlapping input is indeterminate:
Left: (In: { unit: string, value: number }) => Out<{ name: string, unit: "unit", value: number % 1 }>
Right: (In: { unit: "cup" | "cups" | "l" | "liter" | "liters" | "milliliter" | "milliliters" | "ml" | "tablespoon" | "tablespoons" | "tbsp" | "teaspoon" | "teaspoons" | "tsp", value: number }) => Out<{ unit: "ml", value: number % 1 }>

Which makes sense if the union is unordered.

Is there a way to make this union ordered? If not, is there a more fluent way to do this than wrapping it in a function?
Was this page helpful?