типа, есть функции foo({a: Int, b: String}), bar({c: Int, d: Long}) и если переменная используется в обоих, то её тип минимум {a: Int, b: String, c: Int, d: Long}
Я не совсем понял, ты хочешь, чтобы тип этой переменной так выводился? А где ж тут типобезопасность тогда, где проверка сходимости?