Na realidade não é por ser objeto. Mas por ter as mesmas propriedades. Ou seja, como ambos tem as mesmas name e emailAddress, e o age não existe em UserSend, que é a definição, tá tudo certo. Basicamente nao falta nada, então ele aceita.

Tenha em mente que typescript é só javascript. E javascript não tem tipagem. Ou seja, quando você compila, vira tudo javascript e os dados estarão lá, ou seja, o esperado é que funcione depois de compilado. Só lembrando que typescript só existe durante o desenvolvimento. Após converter, é tudo js.

Ah, mas você deve pensar: Ok, mas é outra tipagem, mesmo que compatível. Isso é desejável? sim. É a forma como typescript foi pensado. Acho que chamam de Duck Type. É aquela piada do pato: se anda como um pato, voa como um pato e nada como um pato, então é um pato.

Vc está correto, realmente é por conta da "compatibilidade" das propriedades. Nunca vi algo parecido com isso kkk