А что вас смущает? У вас функция возвращает union тип. Значит там либо одно, либо другое. То есть набор полей у результата - это
пересечение множества полей Mansion и House. В пересечении нет поля butlers.
Если будете вручную приводить к типу as Mansion как говорит
0xD34F можете нарваться на runtime ошибку. TS вам все верно говорит.
Вам нужно определиться, что делает ваша функция:
- возвращаяет одно из двух - тогда она может вернуть House, а там действительно нет butlers
- возвращает House и дополняет его butlers равным 10? Тогда возможно вам вообще нужен новый тип.
Если вы хотите вернуть что-то, что одновременно
и Mansion и House используйте &:
function getProperty() : ( Mansion & House) {
...
Такой код читается как "вернуть объект который одновременно и Mansion и House". При этом в типе будет
объединение множеств полей Mansion и House
P. S. если Mansion подвид House - можно использовать extends:
interface House {
bedrooms: number,
bathrooms: number
}
interface Mansion extends House {
butlers: number
}