Duck Typing
/* Some user library. */
class User {
firstName: string;
lastName: string;
email: string;
address: string;
}
/* Some shop administration library. */
class ShopOwner {
firstName: string;
lastName: string;
email: string;
phoneNumber: string;
}
class Shop {
email: string;
}
/* Emailing library. */
interface Emailable {
firstName: string;
lastName: string;
email: string;
}
const sendEmail = (message: string, emailable: Emailable) => {
...
};
// OK
sendEmail('Hi', new User());
// OK
sendEmail('Hi', new ShopOwner());
// OK
sendEmail('Hi', {
firstName: 'Foo',
lastName: 'BAR',
email: '[email protected]'
});
// error TS2345: Argument of type 'Shop' is not assignable to parameter of type 'Emailable'.
// Property 'firstName' is missing in type 'Shop'.
sendEmail('Hi', new Shop());Mis à jour