March 16, 2021

πŸ†ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° TypeScriptπŸš€

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ


Одна ΠΈΠ· самых Π»ΡŽΠ±ΠΈΠΌΡ‹Ρ… Ρ‡Π΅Ρ€Ρ‚ JavaScript – отсутствиС шага компиляции. ΠŸΡ€ΠΎΡΒ­
Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ свой ΠΊΠΎΠ΄, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€, Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ позаботится ΠΎΠ±ΠΎ всСм
ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ. НСт нСобходимости ΠΆΠ΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя, ΠΏΠΎΠΊΠ° компилятор Π½Π΅ Π·Π°ΠΊΠΎΠ½-
Ρ‡ΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ свой ΠΊΠΎΠ΄.
Π₯отя ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ это ΠΊΠ°ΠΊ прСимущСство, Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎ-
Ρ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ шаг компиляции. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ
Π³Π»ΡƒΠΏΡ‹Π΅ ошибки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ скобки ΠΈΠ»ΠΈ запятыС. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚
Π½Π°ΠΉΡ‚ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ нСвнятныС ошибки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ использованиС ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ°Π²Ρ‹Ρ‡-
ΠΊΠΈ (') Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ двойная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° ("). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚-
Ρ‡ΠΈΠΊ JavaScript ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΡ‚Ρ€Π°ΡˆΠ½Ρ‹Π΅ истории ΠΎ часах, ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… Π½Π° поиск
ошибок Π² своСм ΠΊΠΎΠ΄Π΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ пропустил ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ
Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ скобку } ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π·Π°ΠΏΡΡ‚ΡƒΡŽ.
ИспользованиС шага компиляции Π² своСм Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ процСссС Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎ-
Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ большой Π±Π°Π·ΠΎΠΉ ΠΊΠΎΠ΄Π°. БущСствуСт старая ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ°,
Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ говорится, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π½ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· строя ΠΈ Π³Ρ€ΠΎΠΌΠΊΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ
ΠΈΠ· строя, Π° компилятор Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Π³Ρ€ΠΎΠΌΠΊΠΎ ΠΊΡ€ΠΈΡ‡Π°Ρ‚ΡŒ Π½Π° самой Ρ€Π°Π½Π½Π΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ
стадии, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ошибки. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ любая фиксация ΠΈΠ·-
ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² исходном ΠΊΠΎΠ΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ свободна ΠΎΡ‚ ошибок, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… компилято-
Ρ€ΠΎΠΌ.
ΠŸΡ€ΠΈ внСсСнии ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Π½Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ±Π΅-
Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅ΠΌ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’ большой ΠΊΠΎ-
ΠΌΠ°Π½Π΄Π΅ это часто ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ использованиС вСтвлСния ΠΈ слияния рСпозитория ис-
Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ шага компиляции Π΄ΠΎ, Π²ΠΎ врСмя ΠΈ послС слияния ΠΈΠ·
ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅
ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΠ»ΠΈ ошибок ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ Π² процСссС автоматичСского слияния Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π±Ρ‹Π»ΠΎ
Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ ошибок.
Если ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ процСсс Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, сСр-
Π²Π΅Ρ€ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ (CI) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ отвСтствСнным Π·Π° созданиС
ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ всСго сайта, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΈΠ½Ρ‚Π΅-
Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ TypeScript ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ²
Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… тСстов для вновь зарСгистрированного ΠΊΠΎΠ΄Π°. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ
часы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ уходят Π½Π° сборку ΠΈ тСстированиС, гарантируя отсутствиС синтакси-
чСских ошибок Π² ΠΊΠΎΠ΄Π΅, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΡŽ ΠΈ запуску тСстов.
НаконСц, ΠΊΠ°ΠΊ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, компилятор TypeScript ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ настроСн Π½Π°
Π²Ρ‹Π²ΠΎΠ΄ ES3, ES5 ΠΈΠ»ΠΈ ES6 JavaScript. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ
Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии срСды выполнСния ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±Π°Π·Ρ‹ ΠΊΠΎΠ΄Π°.

Бильная типизация


JavaScript Π½Π΅ сильно Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Ρ‹ΠΉ язык, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΏΠΎ-
зволяСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ свои свойства ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° Π»Π΅Ρ‚Ρƒ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅-
Ρ€Π° рассмотрим ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄:
var test = "this is a string; console.log('test=' + test); test = 1; console.log('test=' + test); test = function (a, b) { return a + b; }
console.log('test=' + test);
Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС этого Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° объявлСна пСрСмСнная с ΠΈΠΌΠ΅Π½Π΅ΠΌ test ΠΈ Π΅ΠΉ ΠΏΡ€ΠΈ-
своСно строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² этом, ΠΌΡ‹ записали Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½-
соль. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ присваиваСм числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ test ΠΈ снова записы-
Π²Π°Π΅ΠΌ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² консоль. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π° послСдний Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚
ΠΊΠΎΠ΄Π°. ΠœΡ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ
test. Если ΠΌΡ‹ запустим этот ΠΊΠΎΠ΄, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:
test = this is a string test = 1 test = function (a, b) { return a + b; }
Π—Π΄Π΅ΡΡŒ ясно Π²ΠΈΠ΄Π½Ρ‹ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ вносим Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ test. Она ΠΌΠ΅-
няСтся, пСрСходя ΠΎΡ‚ строкового значСния ΠΊ числовому, Π° Π·Π°Ρ‚Π΅ΠΌ становится Ρ„ΡƒΠ½ΠΊ-
Ρ†ΠΈΠ΅ΠΉ.
ИзмСнСниС Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²ΠΎ врСмя выполнСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ опасным
занятиСм ΠΈ привСсти ΠΊ бСсчислСнным ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ объ-
Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ сло-
Π²Π°ΠΌΠΈ, ΠΎΠ½ΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ послС объявлСния.
Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ TypeScript ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ²
Π₯отя вСсь ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ являСтся допустимым ΠΊΠΎΠ΄ΠΎΠΌ JavaScript – ΠΈ ΠΌΠΎ-
ΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½, – довольно Π»Π΅Π³ΠΊΠΎ Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам
Π²ΠΎ врСмя выполнСния. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π±Ρ‹Π»ΠΈ отвСтствСнны Π·Π° написаниС
Π±ΠΈΠ±Π»ΠΈΠΎΒ­Ρ‚Π΅Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для добавлСния Π΄Π²ΡƒΡ… чисСл, Π° Π·Π°Ρ‚Π΅ΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚-
Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡ΠΈΠ» Π²Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, вмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ-
Π±Ρ‹ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ эти числа.
Подобного Ρ€ΠΎΠ΄Π° ошибки ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строках ΠΊΠΎΠ΄Π°, Π½ΠΎ
Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ вашСй Π±Π°Π·Ρ‹ ΠΊΠΎΠ΄Π° ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·-
Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ всС Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅.

БинтаксичСский сахар


TypeScript прСдставляСт ΠΎΡ‡Π΅Π½ΡŒ простой синтаксис для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎ
врСмя компиляции. Π­Ρ‚ΠΎΡ‚ синтаксис извСстСн ΠΊΠ°ΠΊ синтаксичСский сахар, ΠΈΠ»ΠΈ, Π±ΠΎ-
Π»Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, аннотация Ρ‚ΠΈΠΏΠΎΠ². Рассмотрим ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π½ΠΈΠΆΠ΅ Π²Π΅Ρ€ΡΠΈΡŽ нашСго
исходного ΠΊΠΎΠ΄Π° JavaScript, написанного Π½Π° TypeScript:
var test: string = "this is a string";
test = 1;
test = function(a, b) { return a + b; }
ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС этого Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ :
ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово string ΠΌΠ΅ΠΆΠ΄Ρƒ нашСй ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π΅Π΅ присваиваниСм. Π­Ρ‚ΠΎΡ‚
синтаксис Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ устанавливаСм Ρ‚ΠΈΠΏ нашСй ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½-
Π½ΠΎΠΉ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ string ΠΈ Ρ‡Ρ‚ΠΎ любой ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ придСрТиваСтся этих ΠΏΡ€Π°Π²ΠΈΠ»,
ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС компиляции. Запуск ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· компилятор
TypeScript Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π΄Π²Π΅ ошибки:
hello.ts(3,1): error TS2322: Type 'number' is not assignable to
type 'string'.
hello.ts(4,1): error TS2322: Type '(a: any, b: any) => any' is
not assignable to type 'string'.
ΠŸΠ΅Ρ€Π²Π°Ρ ошибка довольно ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°. ΠœΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ пСрСмСнная test являСтся
строкой, ΠΈ поэтому ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅ΠΉ Π½ΠΎΠΌΠ΅Ρ€ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции.
Вторая ошибка ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΈ, ΠΏΠΎ сути, Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈ-
ΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ строкС.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, компилятор TypeScript Π²Π²ΠΎΠ΄ΠΈΡ‚ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈ-
Π·Π°Ρ†ΠΈΡŽ Π² нашСм ΠΊΠΎΠ΄Π΅ JavaScript, прСдоставляя Π½Π°ΠΌ всС прСимущСства сильно Ρ‚ΠΈ-
ΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ языка. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ TypeScript описываСтся ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈ-
Π°Π½Ρ‚ JavaScript.

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ


Одним ΠΈΠ· Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ-
мирования являСтся инкапсуляция, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°-
Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков программирования ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ класса для этой
Ρ†Π΅Π»ΠΈ – прСдоставляя способ опрСдСлСния шаблона для Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ связанных Ρ„ΡƒΠ½ΠΊ-
Ρ†ΠΈΠΉ.
Для Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° простоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса TypeScript:
class MyClass { add(x, y) { return x + y; } } var classInstance = new MyClass(); var result = classInstance.add(1,2); console.log('add(1,2) returns ${result}');
Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ довольно прост для чтСния ΠΈ понимания. ΠœΡ‹ создали класс MyClass
с простой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ add. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΌΡ‹ просто создаСм Π΅Π³ΠΎ экзСмп­
ляр класса ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ add с двумя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.
JavaScript, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ES6, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° класса, Π½ΠΎ вмСсто этого ис-
ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для воспроизвСдСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ классов. Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»Ρ-
ция Ρ‡Π΅Ρ€Π΅Π· классы достигаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΠ±ΠΎ шаблона ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°, Π»ΠΈΠ±ΠΎ шабло-
Π½Π° замыкания. ПониманиС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² ΠΈ шаблона замыкания ΠΈ ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅
использованиС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ Π½Π°Π²Ρ‹ΠΊΠΎΠΌ ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π° Π½Π°
JavaScript ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ уровня.
Π—Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ – это, ΠΏΠΎ сути, функция, которая ссылаСтся Π½Π° нСзависимыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½-
Π½Ρ‹Π΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ замыкания, Π·Π°ΠΏΠΎ-
ΠΌΠΈΠ½Π°ΡŽΡ‚ срСду, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ созданы. Π­Ρ‚ΠΎ позволяСт JavaScript ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ
Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ. Π—Π°ΠΏΠΈΡΡŒ опрСдСлСния
MyClass Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ с использованиСм замыкания Π² JavaScript Π±ΡƒΒ­Π΄Π΅Ρ‚ Π²Ρ‹-
Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:
var MyClass = (function () { // ΡΠ°ΠΌΠΎΠ²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°ΡΡΡ функция – это срСда, // ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚; function MyClass() { // MyClass – это внутрСнняя функция, // Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅; } MyClass.prototype.add = function (x, y) { return x + y; }; return MyClass; })();

var classInstance = new MyClass(); var result = classInstance.add(1, 2); console.log("add(1,2) returns " + result);


ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ MyClass ΠΈ Π½Π°Π·Π½Π°Ρ‡ΠΈΠΌ Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая выполняСтся
Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, – ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° }) (); синтаксис Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части ΠΎΠΏΡ€Π΅Π΄Π΅-
лСния замыкания. Π­Ρ‚ΠΎΡ‚ синтаксис являСтся распространСнным способом написа-
ния ΠΊΠΎΠ΄Π° Π½Π° JavaScript Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² глобальноС простран-
ство ΠΈΠΌΠ΅Π½. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ опрСдСляСм Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ MyClass ΠΈ Π²ΠΎΠ·Π²Ρ€Π°-
Ρ‰Π°Π΅ΠΌ Π΅Π΅ внСшнСй Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ПослС этого ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅
слово prototype, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ MyClass. Π­Ρ‚Π°
функция называСтся add ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, возвращая ΠΈΡ… сумму.
ПослСдниС нСсколько строк ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊ ис-
ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ Π² JavaScript. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ экзСмпляр Ρ‚ΠΈΠΏΠ° замыкания,
Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ add. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этого ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
add(1,2) returns 3 в консоль, как и оТидалось.
Π‘Ρ€Π°Π²Π½ΠΈΠ² ΠΊΠΎΠ΄ JavaScript с ΠΊΠΎΠ΄ΠΎΠΌ TypeScript, Π»Π΅Π³ΠΊΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, насколько просто Π²Ρ‹-
глядит TypeScript ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с эквивалСнтным JavaScript. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΌΡ‹ ΡƒΠΏΠΎ-
ΠΌΠΈΠ½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ программисты Π½Π° JavaScript ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Π½ΡƒΡŽ { ΠΈΠ»ΠΈ
ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ( скобку? ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° послСднюю строку Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ замыкания:
})(); Π½Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°ΠΊΠΎΠΉ скобки ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΉΡ‚ΠΈ нСсколько часов ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.