Typescript использует структурную типизацию при определении совместимости типов.Это означает, что если два типа имеют совместимую структуру, они будут совместимы:
class Customer { name: string }
class CustomerLayoutViewModel { name: string }
const customer = new Customer();
let customerViewModel = new CustomerLayoutViewModel();
customerViewModel = customer; // OK compatible
Если Customer
имеет дополнительные свойства, типы все еще совместимы, нет никаких шансов, что кто-то получит доступ через customerViewModel
что-тоэтого нет:
class Customer { name: string; fullName: string }
class CustomerLayoutViewModel { name: string }
const customer = new Customer();
let customerViewModel = new CustomerLayoutViewModel();
customerViewModel = customer; // still OK compatible
Вы получите ошибки совместимости, если CustomerLayoutViewModel
имеет дополнительные обязательные свойства:
class Customer { name: string }
class CustomerLayoutViewModel { name: string; fullName: string }
const customer = new Customer();
let customerViewModel = new CustomerLayoutViewModel();
customerViewModel = customer; //error now
Единственный способ убедиться, что типы несовместимы, это добавитьличное поле для класса.закрытые поля не будут совместимы с любым другим полем в любом другом событии класса, если имя совпадает:
class Customer { private x: string }
class CustomerLayoutViewModel { private x: string }
const customer = new Customer();
let customerViewModel = new CustomerLayoutViewModel();
customerViewModel = customer; //error Types have separate declarations of a private property 'x'.