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
, щоб зафіксувати їх тип, наприклад.
У цьому прикладі bar
має буквальний тип "Hello World"
. Ми докладніше розглядаємо це в literal type section.
Capturing Key Names
Оператор keyof
дозволяє фіксувати назви ключів типу. наприклад ви можете використовувати його для захоплення імен ключів змінної, спершу захопивши її тип за допомогою typeof
:
Це дозволяє досить легко мати такі речі, як рядок enum + константи, як ви щойно бачили в прикладі вище.
Last updated