Чи коли-небудь ви задавалися питанням, чому назви типів і змінних для значень не конфліктують у TS? Тобто чому ви можете оголосити тип "Person" та об'єкт "Person" в одній області видимості?
type Person = { age: number; name: string };
const Person: Person = { age: 1, name: 'Anastasiia'};У TS типи та значення зберігаються в різних неймспейсах. Залежно від того, де ви розмістите свою змінну, вона зарезолвиться як тип або як значення:
if(count > 0) // ts infers a value
let x: count = 5 // ts infers a type
Проте, у TypeScript є дві особливі сутності, які обробляються і як тип і як значення. Це класи та енами.
enum FRUITS {ORANGE, APPLE};
let meal: FRUITS = FRUITS.APPLEЯк класи, так і енами генерують як тип в нейспейсі типів так і значення в неймспейсі значень.