Мне кажется этот пример еще лучше показывает самую большую на мой вгзляд проблему тайпскрипта - неумение (в отличие от флоу) проверять параметры у метода объекта
function getUserGreetings(user: { sayHello(user: { firstName: string }): string }) {
user.sayHello({firstName: "vasya"})
}
getUserGreetings({
sayHello(user: { firstName: string, lastName: string }): string {
return "hello" + user.firstName.toUpperCase() + " " + user.lastName.toUpperCase();
}
})
Есть функция getUserGreetings которая принимает объект с методом seyHello и вызывает его передав объект с одним полем firstName. Дальше эта функция getUserGreetings вызывается с передачей объекта у которого метод sayHello принимает объект не с одним а с двумя полями firstName и lastNamе и мы получаем ошибку в рантайме а тайпскрипт со всеми флагами строгости тупо не видит ошибку