structural typing
TypeScript compares objects by their shape, not by name, so any object with the right properties counts as a `Product` even if never declared as one.
TypeScript compares objects by their shape, not by name, so any object with the right properties counts as a `Product` even if never declared as one.