Imagine you are in a room with a bunch of different toys. Some toys are cars, some are dolls, and some are blocks. Each toy has different features and can do different things. Let's say you are trying to find all the toys that can roll. You look at each toy and check if it can roll. If it can, you add it to a group of toys that can roll.
A structural type system works kind of like this. Instead of looking at toys, it looks at different pieces of code (like functions and variables) and checks what they can do. It groups them together based on their features, or their "type."
In a structural type system, the type of a piece of code is determined by what it can do or what features it has, rather than what it's called or where it's located. So if two pieces of code have the same features, even if they're called different things or are in different parts of the program, they're considered the same type.
This can be helpful because it lets you reuse code more easily. If you have a bunch of functions that can do similar things, even if they're called different names or are in different parts of the program, you can treat them all as the same type and use them interchangeably.