Structural typing (duck typing) kiểm tra shape/structure thay tên type. Hai types tương thích nếu có cùng properties. Phù hợp hơn với JavaScript (dynamic, object literal heavy). TypeScript kết hợp: structural làm mặc định + branded types cho nominal khi cần.
Gotcha thú vị: hai class khác tên nhưng cùng shape hoàn toàn có thể assign cho nhau — bất ngờ với devs từ Java/C#.
typescript
class Dog { name: string; breed: string; constructor(n: string, b: string) { this.name = n; this.breed = b; } }
class Cat { name: string; breed: string; constructor(n: string, b: string) { this.name = n; this.breed = b; } }
const dog: Dog = new Cat('Luna', 'Siamese'); // OK — same shape!