TS permite um objeto de outro "tipo" por parâmetro, além daquele que se espera.
No cód abaixo, estava vendo um pouco sobre objetos no ts, e acabei notando que a função sendMessage aceitou um objeto diferente do especificado.
const message: string = "Hello";
let user: {
name: string;
emailAddress: string;
age: number;
};
user = {
name: "Gabriel",
emailAddress: "[email protected]",
age: 10,
};
class UserSender {
public name: string = "";
public emailAddress: string = "";
public constructor(name: string, emailAddress: string) {
this.name = name;
this.emailAddress = emailAddress;
}
}
function sendMessage(msg: string, user: UserSender): void {
console.log(
`Sended For: name: ${user.name},emailAddress: ${user.emailAddress}Message Sent: ${msg}`
);
}
sendMessage(message, new UserSender("Galvão", "[email protected]")); // funciona
sendMessage(message, user); // tmb funciona
Ao pesquisar, notei que o ts faz a análise de validação, baseada na estrutura do objeto
, e não estritamente pelo seu tipo
, pq afinal, tanto UserSender
, quanto user
são do tipo object
.
Isso não seria um comportamento altamente indesejável?