Moving Types
Система типів TypeScript є надзвичайно потужною та дозволяє переміщувати та нарізати типи способами, неможливими в жодній іншій окремій мові.
Це пов’язано з тим, що TypeScript розроблено, щоб дозволити вам бездоганно працювати з highly dynamic мовою, такою як JavaScript. Тут ми розглянемо кілька прийомів для переміщення типів у TypeScript.
Основна мотивація для них: ви змінюєте щось одне, а все інше просто оновлюється автоматично, і ви отримуєте приємні помилки, якщо щось збирається зламатися, наприклад добре розроблена система обмежень.
Copying both the Type + Value
Якщо ви хочете перемістити клас, у вас може виникнути спокуса зробити наступне:
Це помилка, оскільки var
скопіював лише Foo
в простір оголошення variable тому ви не можете використовувати Bar
як анотацію типу. Правильним способом є використання ключового слова import
. Зверніть увагу, що ви можете використовувати ключове слово import
таким чином, лише якщо ви використовуєте namespaces або modules (докладніше про це пізніше):
Цей трюк import
працює лише для речей, які є both type and variable.
Capturing the type of a variable
Ви можете використовувати змінну в анотації типу за допомогою оператора typeof
. Це дозволяє повідомити компілятору, що одна змінна має той самий тип, що й інша. Ось приклад, щоб продемонструвати це:
Capturing the type of a class member
Ви можете перейти до будь-якого типу об’єкта, який не допускає значення NULL, щоб отримати тип властивості:
Крім того, подібно до захоплення типу змінної, ви просто оголошуєте змінну виключно для цілей захоплення типу:
Capturing the type of magic strings
Багато бібліотек і фреймворків JavaScript працюють на необроблених рядках JavaScript. Ви можете використовувати змінні const
, щоб зафіксувати їх тип, наприклад.
Capturing Key Names
Оператор keyof
дозволяє фіксувати назви ключів типу. наприклад ви можете використовувати його для захоплення імен ключів змінної, спершу захопивши її тип за допомогою typeof
:
Це дозволяє досить легко мати такі речі, як рядок enum + константи, як ви щойно бачили в прикладі вище.
Last updated