Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript

Π’ΠΈΠΏScript для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…, Ρ‡Π°ΡΡ‚ΡŒ 5: Generics

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ Π² нашСй сСрии TypeScript для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… посвящСн основным Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, доступных Π² TypeScript. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² Π² TypeScript позволяСт Π½Π°ΠΌ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² нашСм ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ мноТСства ошибок ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ IDE смоТСт Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ выполняСм ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π°Π΄ Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ TypeScript.

ΠŸΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² Π³Π΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ…

Если Π²Ρ‹ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсно, Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ½Ρ‹. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ я ΠΎΡ‚Π²Π΅Ρ‡Ρƒ Π½Π° этот вопрос. НачнСм с написания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π²Π΅Ρ€Π½Π΅Ρ‚ случайный элСмСнт ΠΈΠ· массива чисСл.

Π§Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, скаТСм, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ случайный строковый элСмСнт ΠΈΠ· массива строк. На этом этапС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ для строк.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ случайный элСмСнт ΠΈΠ· массива интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ? Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ случайный элСмСнт ΠΈΠ· массива Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для получСния случайных ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ случайных Ρ†Π²Π΅Ρ‚ΠΎΠ². Одна ΠΈΠ· основных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с этим Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ потСряСтС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.

Π›ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ для избСТания дублирования ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ сохранСнии ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΈΠΏΠ΅ являСтся использованиС Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². Π’ΠΎΡ‚ общая функция, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ случайныС элСмСнты ΠΈΠ· массива.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescriptΠ§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript

ИспользованиС Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ

Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ TypeScript Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π° нашСй ΠΎΠ±Ρ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Ρ€Π°Π½Π΅Π΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ наша общая функция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΊΠΎ всСм Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эту ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Π±ΠΎΠ»Π΅Π΅ понятной.

Π’Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Π°Ρ функция ΡƒΠ΄Π°Π»ΠΈΡ‚ всС вхоТдСния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ символа ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠΉ строки. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ захочСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ числа, Π° Ρ‚Π°ΠΊΠΆΠ΅ символы ΠΈΠ· строки. Π’ΠΎΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ общая функция.

Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° использованиС Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² ΠΎΠ±Ρ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ вас Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ концСпция Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ большого смысла. Мало Ρ‡Π΅Π³ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊΠΎ всСм Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΎΠ±Ρ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Одна ваТная Π²Π΅Ρ‰ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Π½Π° этом этапС, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ со всСми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π§Π°Ρ‰Π΅ всСго создаСтся функция, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с использованиСм ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ

ΠžΠ±Ρ‰Π°Ρ функция removeIt ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ replace Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования со строками, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π΅ΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любой Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΎΡ‚ общая функция, которая ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ имя людСй, Ρ‡Π»Π΅Π½ΠΎΠ² сСмьи ΠΈΠ»ΠΈ знамСнитостСй, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π΅ΠΉ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ я попытался ΠΎΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒ основы Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² Π² TypeScript Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Ρ„ΠΎΡ€ΠΌΠ΅. ΠœΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΡΡ‚Π°Ρ‚ΡŒΡŽ, обсуТдая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ создания Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². ПослС этого ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ способС использования Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ дублирования ΠΊΠΎΠ΄Π°, Π½Π΅ ТСртвуя ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ². Когда Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅ основы, обсуТдаСмыС здСсь, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ большС ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ… Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ вопросы, связанныС с этим руководством, я Π±ΡƒΠ΄Ρƒ Ρ€Π°Π΄ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° Π½ΠΈΡ… Π² коммСнтариях.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π² TypeScript: разбираСмся вмСстС

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! Команда TestMace ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΈΠ· ΠΌΠΈΡ€Π° web-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. На этот Ρ€Π°Π· для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²! ΠŸΡ€ΠΈΡΡ‚Π½ΠΎΠ³ΠΎ чтСния.

Π Π°Π·Π²Π΅Π΅ΠΌ ΠΏΠ΅Π»Π΅Π½Ρƒ таинствСнности ΠΈ нСдопонимания Π½Π°Π΄ синтаксисом ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ† подруТимся с Π½ΠΈΠΌ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript

НавСрноС, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°Ρ‚Ρ‘Ρ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Java ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков Π½Π΅ Ρ…Π»ΠΎΠΏΠ°ΡŽΡ‚ Π³Π»Π°Π·Π°ΠΌΠΈ, ΡƒΠ²ΠΈΠ΄Π΅Π² Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ Π² TypeScript. Π•Π³ΠΎ синтаксис ΠΊΠΎΡ€Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ отличаСтся ΠΎΡ‚ всСго Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² JavaScript, поэтому Ρ‚Π°ΠΊ нСпросто сходу Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π΄Π΅Π»Π°Π΅Ρ‚.

Π― Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ всё Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ каТСтся. Π― Π΄ΠΎΠΊΠ°ΠΆΡƒ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ способны Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° JavaScript Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, Ρ‚ΠΎ Π²Ρ‹ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… усилий. ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ!

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π² TypeScript

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ TypeScript приводится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: «Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ β€” это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ΄Π½ΠΈΠΌ, Π° с нСсколькими Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…».

Π—Π΄ΠΎΡ€ΠΎΠ²ΠΎ! Π—Π½Π°Ρ‡ΠΈΡ‚, основная идСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΈΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Но ΠΊΠ°ΠΊ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ? Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ я Π΄ΡƒΠΌΠ°ΡŽ.

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΈ Ρ‚ΠΈΠΏΡ‹ соотносятся Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, ΠΊΠ°ΠΊ значСния ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ способ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ (функциям, классам ΠΈΠ»ΠΈ интСрфСйсам), ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²ΠΎ врСмя Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΡ‹ сообщаСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊΠΈΠ΅ значСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π›ΡƒΡ‡ΡˆΠ΅ всСго Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ° тоТдСствСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ВоТдСствСнная функция β€” это функция, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² Π½Π΅Ρ‘ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ JavaScript ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π‘Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° с числами:

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ тоТдСствСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏ, Π½ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π±Ρ‹Π»Π° Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ ΠΈ срабатывала для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ любого Ρ‚ΠΈΠΏΠ°, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чисСл. ИмСнно для этого ΠΈ Π½ΡƒΠΆΠ½Ρ‹ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния любого Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π²Ρ…ΠΎΠ΄Π΅ ΠΈ, Π² зависимости ΠΎΡ‚ Π½ΠΈΡ…, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ саму Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ-Ρ‚ΠΎ синтаксис Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ вас ΠΏΡƒΠ³Π°Ρ‚ΡŒ. T ΠΈ U β€” это просто ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚Π΅ сами. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вмСсто Π½ΠΈΡ… ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΡ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ данная функция.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ вСрсия понимания ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² зависимости ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. На Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ мСняСтся запись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript

Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ любой Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠ°ΠΊ ΠΈ Π±Ρ‹Π»ΠΎ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΎ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² console.log Π½Π° Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π²Ρ‹ΡˆΠ΅ β€” Π² Π½Π΅Π³ΠΎ Π½Π΅ пСрСдаётся Ρ‚ΠΈΠΏ. Π’ этом случаС TypeScript попытаСтся Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ.

ΠžΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Π΅ классы ΠΈ интСрфСйсы

Π’Π°ΠΌ ΡƒΠΆΠ΅ извСстно, Ρ‡Ρ‚ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ β€” это всСго лишь способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Волько Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с функциями, ΠΈ Ρƒ мСня Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ новости: с классами ΠΈ интСрфСйсами ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’ этом случаС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² слСдуСт послС ΠΈΠΌΠ΅Π½ΠΈ интСрфСйса ΠΈΠ»ΠΈ класса.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ сами. НадСюсь, Ρƒ вас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ.

Если ΠΊΠΎΠ΄ сразу Π½Π΅ понятСн, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ значСния type свСрху Π²Π½ΠΈΠ· Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ дСйствий ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

Π Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ случаи использования: Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ Π·Π° Ρ€Π°ΠΌΠΊΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚:

ПодвСдСм ΠΈΡ‚ΠΎΠ³ΠΈ

НадСюсь, я ΠΏΠΎΠΌΠΎΠ³ Π²Π°ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ. Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, всё, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, β€” это всСго лишь ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ type Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ πŸ™‚

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΅Ρ‰Ρ‘ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ, я ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΠ» Π΄Π°Π»Π΅Π΅ ΠΏΠ°Ρ€Ρƒ ссылок.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π¨ΠΊΠΎΠ»Π° ΠΌΠ°Π³ΠΈΠΈ TypeScript: Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²

Автор ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ сСгодня ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ, Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ TypeScript β€” это просто ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰Π΅. Когда ΠΎΠ½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ TS, Π΅ΠΌΡƒ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ Π½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ Ρ‚Π° свобода, которая присуща этому языку. Π§Π΅ΠΌ большС сил программист Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π² свою Ρ€Π°Π±ΠΎΡ‚Ρƒ со спСцифичными для TS ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ β€” Ρ‚Π΅ΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌ Π²Ρ‹Π³ΠΎΠ΄Ρ‹. Π’ΠΎΠ³Π΄Π° ΠΎΠ½ использовал Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² лишь пСриодичСски. Иногда ΠΎΠ½ пользовался возмоТностями ΠΏΠΎ Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° ΠΈ подсказками компилятора, Π½ΠΎ, Π² основном, полагался лишь Π½Π° собствСнноС Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ Ρ€Π΅ΡˆΠ°Π΅ΠΌΡ‹Ρ… ΠΈΠΌ Π·Π°Π΄Π°Ρ‡.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΎΠ½ ΠΏΡ€ΠΈΡˆΡ‘Π» ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Ρ‚Π°ΠΊ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ. Он подруТился с компилятором, Π½Π°Ρ‡Π°Π» ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΅Π³ΠΎ подсказки. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² ΠΊΠΎΠ΄Π΅ ΠΈ сообщаСт ΠΎ Π½ΠΈΡ… Π·Π°Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ нанСсти Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ€Π΅Π΄. Автор ΡΡ‚Π°Ρ‚ΡŒΠΈ, глядя Π½Π° сСбя ΠΊΠ°ΠΊ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, понял, Ρ‡Ρ‚ΠΎ компилятор β€” это Π΅Π³ΠΎ Π»ΡƒΡ‡ΡˆΠΈΠΉ Π΄Ρ€ΡƒΠ³, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΡ‚ Π½Π΅Π³ΠΎ самого. Как Ρ‚ΡƒΡ‚ Π½Π΅ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ слова ΠΠ»ΡŒΠ±ΡƒΡΠ° Π”Π°ΠΌΠ±Π»Π΄ΠΎΡ€Π°: «ВрСбуСтся большая Ρ…Ρ€Π°Π±Ρ€ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² своих Π²Ρ€Π°Π³ΠΎΠ², Π½ΠΎ Π½Π΅ мСньшС Π΅Π΅ трСбуСтся ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² своих Π΄Ρ€ΡƒΠ·Π΅ΠΉΒ».

Каким Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π½ΠΈ Π±Ρ‹Π» компилятор, Π΅ΠΌΡƒ Π½Π΅ всСгда Π»Π΅Π³ΠΊΠΎ ΡƒΠ³ΠΎΠ΄ΠΈΡ‚ΡŒ. Иногда ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ использования Ρ‚ΠΈΠΏΠ° any ΠΎΡ‡Π΅Π½ΡŒ нСпросто. А ΠΏΠΎΡ€ΠΎΠΉ каТСтся, Ρ‡Ρ‚ΠΎ any β€” это СдинствСнноС Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» посвящён Π΄Π²ΡƒΠΌ ситуациям. ИзбСТав использования Π² Π½ΠΈΡ… Ρ‚ΠΈΠΏΠ° any ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ возмоТности ΠΏΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ использованию ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятным.

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ

Как Π²ΠΈΠ΄Π½ΠΎ, Ρƒ нас имССтся Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ функция, Π½ΠΎ Π² Π½Π΅ΠΉ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ², Π° ΠΈΡ… отсутствиС ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ нСльзя Π½Π°Π·Π²Π°Ρ‚ΡŒ типобСзопасной. Π˜ΡΠΏΡ€Π°Π²ΠΈΠΌ это.

Π’Π°ΠΊ наша функция выглядит ΡƒΠΆΠ΅ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΡ‚ Π½Π΅Ρ‘ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, это пригодится Π½Π°ΠΌ ΠΏΠΎΠ·ΠΆΠ΅. Однако для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ бСзопасной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΌΡ‹ ΠΏΠΎΠΆΠ΅Ρ€Ρ‚Π²ΠΎΠ²Π°Π»ΠΈ возмоТностями ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π§Ρ‚ΠΎ Ссли Π½Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ понадобится ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Ρ‘ для получСния ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… сущностСй? НС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ нСльзя Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠΆΠ΅ Π½ΠΈΠΊΠ°ΠΊ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ. И это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ.

Π’ TypeScript, ΠΊΠ°ΠΊ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ (generics), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Ρ‘ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈΒ», Β«ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈΒ», «обобщСниями».

ИспользованиС Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова keyof β€” это вСсьма ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΡ‘ΠΌ. Если Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² IDE, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ TypeScript, Ρ‚ΠΎ, вводя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π²Ρ‹ смоТСтС Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ возмоТностями автодополнСния, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

НадСюсь, Ρ‡Ρ‚ΠΎ сСйчас Ρƒ вас ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ‡Ρ‘Ρ‚ΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ Π² TypeScript, Π½ΠΎ Ссли Π²Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ совсСм Ρ…ΠΎΡ€ΠΎΡˆΠΎ всё ΡƒΡΠ²ΠΎΠΈΡ‚ΡŒ, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с рассмотрСнным здСсь ΠΊΠΎΠ΄ΠΎΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ сюда.

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²

Π˜Ρ‚Π°ΠΊ, этот ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

Если Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ интСрфСйс внСшнСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚ΠΎ Π²Π°ΠΌ, скорСС всСго, понадобится доступ ΠΊ пространству ΠΈΠΌΡ‘Π½ ( namespace ) этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ userId ΠΊ Request ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Express :

ΠŸΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ· этого Ρ€Π°Π·Π΄Π΅Π»Π° ΠΌΠΎΠΆΠ½ΠΎ здСсь.

Π˜Ρ‚ΠΎΠ³ΠΈ

Π’ этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ рассмотрСли ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ использования Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ² Π² TypeScript. НадССмся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ сСгодня ΡƒΠ·Π½Π°Π»ΠΈ, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π² написании Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠ³ΠΎ, понятного ΠΈ типобСзопасного ΠΊΠΎΠ΄Π°.

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Как Π²Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ‚ΠΈΠΏΡƒ any Π² TypeScript?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π² TypeScript

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, я Π‘Π΅Ρ€Π³Π΅ΠΉ Π’Π°Ρ…Ρ€Π°ΠΌΠΎΠ², занимаюсь Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π½Π° Angular Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π’ΠΈΠ½ΡŒΠΊΠΎΡ„Ρ„. Π’ΠΎ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ вошСл Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с тайпскрипта, просто ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡ‚Π°Π² всю Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. Π‘ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈ спСцификация ECMAScript Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ»Π°ΡΡŒ, ΠΈ TypeScript сильно подрос. Казалось Π±Ρ‹, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±ΠΎΡΡ‚ΡŒΡΡ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ², вСдь Π±ΠΎΡΡ‚ΡŒΡΡ Ρ‚Π°ΠΌ Π½Π΅Ρ‡Π΅Π³ΠΎ? Мой ΠΎΠΏΡ‹Ρ‚ общСния с Π΄ΠΆΡƒΠ½ΠΈΠΎΡ€-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ рСбята Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ просто ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ пустил Π»Π΅Π³Π΅Π½Π΄Ρƒ ΠΎΠ± ΠΈΡ… слоТности.

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ generic-Ρ‚ΠΈΠΏΡ‹ Π² TypeScript: Π½Π΅ Π·Π½Π°ΡŽΡ‚ ΠΎ Π½ΠΈΡ…, боятся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ вмСсто Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² β€” any .

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ, ΠΈΠ»ΠΈ Generic Types, β€” ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. Они Π½ΡƒΠΆΠ½Ρ‹ для описания ΠΏΠΎΡ…ΠΎΠΆΠΈΡ…, Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Ρ‚ΠΎ характСристиками Ρ‚ΠΈΠΏΠΎΠ². ΠœΡ‹ описываСм ΠΎΠ±Ρ‰ΡƒΡŽ структуру, Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΡƒΠΆΠ΅ опрСдСляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°. Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ β€” это каркас, внутрСнности ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ заполняСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΡƒΠ΄Π° Ρ€Π΅ΡˆΠΈΡ‚ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΠΎΡ‚, ΠΊΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ этот Ρ‚ΠΈΠΏ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² Π² TypeScript. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ массив Π·Π½Π°Ρ‡ΠΊΠΎΠ² Π²Π°Π»ΡŽΡ‚. Π’ JavaScript ΠΌΡ‹ Π±Ρ‹ просто написали:

Π’ TypeScript с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ keyof

Π­Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π΅Ρ€Π΅Ρ‚ всС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ прСдставляСт Π² Π²ΠΈΠ΄Π΅ числового ΠΈΠ»ΠΈ строкового Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ объСдинСния.

Π”Π°Π²Π°ΠΉΡ‚Π΅ прСдставим, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ с сСрвСра ΡˆΠ»ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Ρ‚Π°ΠΊΠΎΠΉ структурой:

Если Π½Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈΠ· Ρ‚ΠΈΠΏΠ° Payment, Ρ‚ΡƒΡ‚ ΠΈ пригодится ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ keyof.

Π§Ρ‚ΠΎ дальшС?

ΠœΡ‹ Π΄Π°Π»ΠΈ основныС знания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΡ‰ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Generic Types.

БлучаСтся, Ρ‡Ρ‚ΠΎ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡƒΠΆΠ΅ написанноС Π΄ΠΎ нас ΠΈ Π½Π΅ влияСм Π½Π° Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠΎΠ΄Π°.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ с сСрвСра ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ описаниС ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ° ΠΈΠ· истории Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅:

ΠŸΠΎΡ‚ΠΎΠΌ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½ΠΎΠ²Ρ‹ΠΉ сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°Ρ…. И ΠΎΠ½ стал ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠ΄ Π²Π°Π»ΡŽΡ‚Ρ‹, Π° Π½Π΅ Π΅Π΅ Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ этом Π½Π° старыС записи Π² истории ΠΌΡ‹ всС Π΅Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ строковый ΠΊΠΎΠ΄. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ… Π² ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ β€” Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ:

МоТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Если Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΎΠΉ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Ρ‚ΠΎ TypeScript Π²ΠΎΠ·ΡŒΠΌΡ‘Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ самый ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ, Π½ΠΎ ΠΎΠ½ сдСлан для Π²Π²ΠΎΠ΄Π° Π² курс Π΄Π΅Π»Π°, дальшС ΠΆΠ΄ΡƒΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹ΠΌΠΈ:

Π’ΠΈΠΏΡ‹ ΠΈ интСрфСйсы Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΡ…ΠΎΠΆΠΈ, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ различия β€” ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаны Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Випизация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

НСкоторыС ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ с Ρ€Π°Π·Π½Ρ‹ΠΌ количСством Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΈΡ… Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Π’ TypeScript Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΎΠΊ.

Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ функция identity β€” ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ.

Но ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ просто Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Function Declaration) Ρ‡Π΅Ρ€Π΅Π· Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ. МоТно Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Function Expression):

Випизация классов

Π—Π°Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΎΠ±ΠΎΠ±Ρ‰Π°Ρ‚ΡŒ классы? Π£ΠΆΠ΅ Π½Π° этапС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΡ‹ часто Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ класс ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для обслуТивания Ρ€Π°Π·Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΌΡƒ списку ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ массив строк для отобраТСния простого ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ массив шаблонов для отрисовки слоТного. Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ класс.

Π’ΠΎΡ‚ ΠΆΠ΅ самый класс Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ понятнСС с TypeScript. Для Π½Π°Ρ‡Π°Π»Π° опишСм интСрфСйс:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ напишСм класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ наш интСрфСйс:

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². Generic Constraints

Иногда Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠΌ. ΠŸΠΎΠΊΠ°ΠΆΡƒ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ функция для получСния значСния свойства length Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

Если Π²Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚Π΅ Π΅Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

Ошибка ΠΏΡ€ΠΎΠΏΠ°Π΄Π΅Ρ‚, Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠŸΡ€ΠΈ этом Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ трСбуСтся Π² Π½Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ.

Какой Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ практичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€? Π”Π°Π²Π°ΠΉΡ‚Π΅ напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² сСбя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΊΠ»ΡŽΡ‡, Π° Π²Ρ‹Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ограничСния Ρ‚ΠΈΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² объявлСнии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

ΠžΡ…Ρ€Π°Π½Π½ΠΈΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ²: Type Guards

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ typeof (typeof type guards). TypeScript β€” классный инструмСнт. Он позволяСт Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΈΠ· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ называСтся Type Inference ΠΈΠ»ΠΈ Β«Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ²Β».

Допустим, Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ пСрСмСнная со ссылкой Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ записаны Π΄Π°Π½Π½Ρ‹Π΅:

Если ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ вывСсти Ρ‚ΠΈΠΏ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΊΠΎΠ΄Π΅, Ρ‚ΠΎ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ сдСлаСм это ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ typeof :

ΠŸΠΎΡ‡Π΅ΠΌΡƒ typeof null === β€˜object’? Π­Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ·Π½Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ JS. МногиС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Π΅Π³ΠΎ Π±Π°Π³ΠΎΠΌ, ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΡ‡Π΅ΠΌΡƒ.

Π›ΡŽΠ±Π°Ρ пСрСмСнная Ρ…Ρ€Π°Π½ΠΈΡ‚ своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±ΠΈΡ‚ΠΎΠ². Из 32 Π±ΠΈΡ‚, ΠΎΡ‚Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… для хранСния значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ€Π΅ΡˆΠΈΠ»ΠΈ 3 Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΅Π΅ Ρ‚ΠΈΠΏΠ°.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ instanceof (instanceof type guards). ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ экзСмпляром ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ класса.

Π’ΡƒΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного. Для упрощСния напишСм классы Π±Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ создадим экзСмпляры этих классов.

User-Defined Type Guards

Π’ TypeScript Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ прСкрасный инструмСнт β€” Β«ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚Π°ΠΉΠΏ-Π³Π°Ρ€Π΄Ρ‹Β».

Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйсы:

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Достаточно лишь ΡΠΊΠ°Π·Π°Ρ‚ΡŒ TypeScript, Ρ‡Ρ‚ΠΎ наша функция опрСдСляСт, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ интСрфСйс Dog :

Π’Π΅ΠΏΠ΅Ρ€ΡŒ TypeScript Π½Π΅ ругаСтся, ΠΎΠ½ понял Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ pet :

Π‘Π½Π°Ρ‡Π°Π»Π° это ΠΌΠΎΠΆΠ΅Ρ‚ слоТно Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ, поэтому ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ суТСниС Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π’Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‡Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании Type Guard вся ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π»Π΅ΠΆΠΈΡ‚ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅. Он Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ TypeScript: Β«Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π²ΠΎΡ‚ этот Ρ‚ΠΈΠΏ ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, я Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΒ».

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΏΡ€ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΈ ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½ΠΈΡ… Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ классы. Π£Π·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈ нСобходимости ΠΏΠΎΠΌΠΎΡ‡ΡŒ TypeScript с Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ², использовав Type Guard.

Если Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ TypeScript Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅, Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ с чтСния ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π•Π΅ стоит ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, просто сСв ΠΈ ΠΏΠΎΡ‡ΠΈΡ‚Π°Π² нСсколько часов ΠΈΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π½Π΅ΠΉ. Π’ΠΎΠ³Π΄Π° слоТится ΠΏΠΎΠ»Π½ΠΎΠ΅ прСдставлСниС ΠΎ языкС. Вряд Π»ΠΈ запомнится всС ΠΈ сразу, Π½ΠΎ ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, Π³Π΄Π΅ Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ.

Для ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ языка Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ β€” TypeScript Handbook. Π•Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΡƒ с ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ, объяснСниСм повСдСния систСмы Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠΎΠ², описаниСм Ρ€Π°Π±ΠΎΡ‚Ρ‹ компилятора. Π’Π°ΠΌ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ½ΠΊΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ задумываСтся повсСднСвно.

Если Π²Ρ‹ Β«ΠΏΠΎΠ·Π½Π°Π»ΠΈ Π΄Π·Π΅Π½Β» Π² написании Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² ΠΈΠ»ΠΈ просто Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈ Π½Π°Π±ΠΈΡ‚ΡŒ Ρ€ΡƒΠΊΡƒ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ€Π΅ΡˆΠ°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ Type Challenges Π² ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠΌ github-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π’ ΠΏΠ°ΠΏΠΊΠ΅ questions Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΠΎ слоТности ΠΈ ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Ρ‹. Под ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅ΡΡ‚ΡŒ ссылка Π½Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ β€” ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сСбя.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠšΠ°Ρ€ΠΌΠ°Π½Π½Π°Ρ ΠΊΠ½ΠΈΠ³Π° ΠΏΠΎ TypeScript. Π§Π°ΡΡ‚ΡŒ 6. ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΠΈ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ typescript

ΠœΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΡΠ΅Ρ€ΠΈΡŽ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° «ΠšΠ°Ρ€ΠΌΠ°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ TypeScript «.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: для большого удобства Π² ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΊΠ½ΠΈΠ³Π° Π±Ρ‹Π»Π° ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π° Π² Π²ΠΈΠ΄Π΅ прогрСссивного Π²Π΅Π±-прилоТСния.
БистСма Ρ‚ΠΈΠΏΠΎΠ² TS позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π½Π° основС Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ².

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ (generics). Π’ нашСм распоряТСнии Ρ‚Π°ΠΊΠΆΠ΅ имССтся Ρ†Π΅Π»Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‚ΠΈΠΏΠ°. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Ρƒ нас Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ any :

Однако, ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π·Π½Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ значСния.

Нам Π½ΡƒΠΆΠ΅Π½ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ способ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° для обозначСния с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΈΠΏΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния. Для этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ°, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Π° Π½Π΅ со значСниями:

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Type ΠΊΠ°ΠΊ для Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Ρ‚Π°ΠΊ ΠΈ для Ρ‚ΠΈΠΏΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ значСния.

Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ (Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ двумя способами. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ всСх Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ°:

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΌ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ являСтся строка.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ компилятору:

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ являСтся Π±ΠΎΠ»Π΅Π΅ распространСнным. Однако, Π² Π±ΠΎΠ»Π΅Π΅ слоТных случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ явноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΊ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Π Π°Π±ΠΎΡ‚Π° с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ° Π² Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ…

Π§Ρ‚ΠΎ Ссли ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² консоль Π΄Π»ΠΈΠ½Ρƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° arg ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ?

ИзмСним сигнатуру Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° с массивом Type :

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠΆΠ΅ самоС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ синтаксиса:

ΠžΠ±Ρ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹

Π’ΠΈΠΏ ΠΎΠ±Ρ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°) ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚ΠΈΠΏ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ указываСтся Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°:

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π² Π²ΠΈΠ΄Π΅ сигнатуры Π²Ρ‹Π·ΠΎΠ²Π° Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°:

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ нас ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ интСрфСйсу:

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ для всСх Ρ‡Π»Π΅Π½ΠΎΠ² интСрфСйса, Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ послС названия интСрфСйса:

ΠšΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‰ΠΈΡ… интСрфСйсов, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ классы.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠ΅ пСрСчислСния (enums) ΠΈ пространства ΠΈΠΌΠ΅Π½ (namespaces) ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ нСльзя.

ΠžΠ±Ρ‰ΠΈΠ΅ классы

ΠžΠ±Ρ‰ΠΈΠΉ класс ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс:

Π’ случаС с Π΄Π°Π½Π½Ρ‹ΠΌ классом ΠΌΡ‹ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ числами. ΠœΡ‹ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ строки ΠΈΠ»ΠΈ слоТныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹:

Класс ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ стороны с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ‚ΠΈΠΏΠΎΠ²: ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ сторону ΠΈ сторону экзСмпляров. ΠžΠ±Ρ‰ΠΈΠ΅ классы ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для экзСмпляров. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ статичСскиС Ρ‡Π»Π΅Π½Ρ‹ класса Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° класса.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ²

Нам Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ интСрфСйс, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм интСрфСйс с СдинствСнным свойством length ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова extends для примСнСния органичСния:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ Π±Ρ‹Π» ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½, ΠΎΠ½ большС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ:

ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΅ΠΌΡƒ значСния, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ всСм установлСнным трСбованиям:

ИспользованиС Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ограничСниях Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ²

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ ΠΈΡ… названиям. ΠŸΡ€ΠΈ этом, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… свойств. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΈΠΏΠ°ΠΌΠΈ:

ИспользованиС Ρ‚ΠΈΠΏΠΎΠ² класса Π² Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ…

ΠŸΡ€ΠΈ создании Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‚ΠΈΠΏΡ‹ классов Ρ‡Π΅Ρ€Π΅Π· ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-конструкторы. НапримСр:

Π’ Π±ΠΎΠ»Π΅Π΅ слоТных случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ использованиС свойства prototype для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ ограничСния ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ-конструктором ΠΈ стороной экзСмляров Ρ‚ΠΈΠΏΠ° класса:

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² миксинах ΠΈΠ»ΠΈ примСсях.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° keyof

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ keyof «Π±Π΅Ρ€Π΅Ρ‚» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строковоС ΠΈΠ»ΠΈ числовоС Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ объСдинСниС Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:

Π’ΠΈΠΏΡ‹ keyof ΡΠ²Π»ΡΡŽΡ‚ΡΡ особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ Π² сочСтании со связанными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ (mapped types), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассмотрим ΠΏΠΎΠ·ΠΆΠ΅.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° typeof

Π’ TS ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ typeof ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² контСкстС Ρ‚ΠΈΠΏΠ° для ссылки Π½Π° Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ свойства:

Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅: значСния ΠΈ Ρ‚ΠΈΠΏΡ‹ β€” это Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅. Для ссылки Π½Π° Ρ‚ΠΈΠΏ значСния f слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ typeof :

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

typeof ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² (Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…) ΠΈΠ»ΠΈ ΠΈΡ… свойств. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ написания ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ выполняСтся:

Π’ΠΈΠΏΡ‹ доступа ΠΏΠΎ индСксу (indexed access types)

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ доступа ΠΏΠΎ индСксу для опрСдСлСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°:

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ β€” это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ объСдинСния, keyof ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹:

ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ доступа ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ свойству Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка:

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ индСксации Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² использовании number для получСния Ρ‚ΠΈΠΏΠΎΠ² элСмСнтов массива. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ typeof для ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° Ρ‚ΠΈΠΏΠ° элСмСнта:

Однако, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синоним Ρ‚ΠΈΠΏΠ° (type alias):

УсловныС Ρ‚ΠΈΠΏΡ‹ (conditional types)

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π°ΠΌ приходится ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° основС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’ TS Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΆΠ΅ зависят ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². УсловныС Ρ‚ΠΈΠΏΡ‹ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ входящих ΠΈ выходящих Π΄Π°Π½Π½Ρ‹Ρ….

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ польза условных Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ слишком ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°. Она становится Π±ΠΎΠ»Π΅Π΅ явной ΠΏΡ€ΠΈ совмСстном использовании условных Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² (ΠΎΠ±Ρ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²).

Рассмотрим Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ createLabel ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π΄Π΅Π»Π°Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€ Π½Π° основС Ρ‚ΠΈΠΏΠΎΠ² Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ВмСсто этого, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ условных Ρ‚ΠΈΠΏΠΎΠ²:

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ для избавлСния ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΎΠΊ:

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ условных Ρ‚ΠΈΠΏΠΎΠ²

Часто ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π² условном Ρ‚ΠΈΠΏΠ΅ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΠΎΠ²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Подобно Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ суТСниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈΠΊΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅Π»Π΅ΠΉ Ρ‚ΠΈΠΏΠ° (type guards) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, инстинная Π²Π΅Ρ‚ΠΊΠ° условного Ρ‚ΠΈΠΏΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ провСряСм.

Рассмотрим Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² условных Ρ‚ΠΈΠΏΠ°Ρ…

ΠœΡ‹ использовали условныС Ρ‚ΠΈΠΏΡ‹ для примСнСния ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈ извлСчСния Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ являСтся Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ распространСнной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, Ρ‡Ρ‚ΠΎ сущСствуСт особая Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ условных Ρ‚ΠΈΠΏΠΎΠ².

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ использовали ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово infer для Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ создания Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ° Item вмСсто извлСчСния Ρ‚ΠΈΠΏΠ° элСмСнта T Π² истинной Π²Π΅Ρ‚ΠΊΠ΅. Π­Ρ‚ΠΎ избавляСт нас ΠΎΡ‚ нСобходимости «ΠΊΠΎΠΏΠ°Ρ‚ΡŒΡΡ» ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ структуру Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹.

ΠŸΡ€ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π° основС Ρ‚ΠΈΠΏΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сигнатур Π²Ρ‹Π·ΠΎΠ²Π° (Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выполняСтся Π½Π° основС послСднСй сигнатуры. НСвозмоТно произвСсти Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° основС списка Ρ‚ΠΈΠΏΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

РаспрСдСлСнныС условныС Ρ‚ΠΈΠΏΡ‹ (distributive conditional types)

Когда условныС Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌ, ΠΎΠ½ΠΈ становятся распрСдСлСнными ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ объСдинСния (union). Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π—Π΄Π΅ΡΡŒ StrOrNumArray распрСдСляСтся Π½Π°:

ΠΈ примСняСтся ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ‡Π»Π΅Π½Ρƒ объСдинСния:

Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ являСтся ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ. Для Π΅Π³ΠΎ измСнСния ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сторону extends Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки:

БвязанныС Ρ‚ΠΈΠΏΡ‹ (mapped types)

БвязанныС Ρ‚ΠΈΠΏΡ‹ основаны Π½Π° синтаксисС сигнатуры доступа ΠΏΠΎ индСксу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² свойств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅:

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ связывания (mapping modifiers)

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ связываниС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ as

Π’ TS 4.1 ΠΈ Π²Ρ‹ΡˆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΡƒ as для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ связывания ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² связанном Ρ‚ΠΈΠΏΠ΅:

Для создания Π½ΠΎΠ²Ρ‹Ρ… Π½Π°Π·Π²Π°Π½ΠΈΠΉ свойств Π½Π° основС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ возмоТности, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏΡ‹ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² (см. Π½ΠΈΠΆΠ΅):

ΠšΠ»ΡŽΡ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ never Π² условном Ρ‚ΠΈΠΏΠ΅:

БвязанныС Ρ‚ΠΈΠΏΡ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ возмоТностями ΠΏΠΎ манипуляции Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с условными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ условный Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true ΠΈΠ»ΠΈ false Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, содСрТит Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ свойство pii с Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½ΠΎ установлСнным true :

Π’ΠΈΠΏΡ‹ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² (template literal types)

Π’ΠΈΠΏΡ‹ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² основаны Π½Π° Ρ‚ΠΈΠΏΠ°Ρ… строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π² нСсколько строк Ρ‡Π΅Ρ€Π΅Π· объСдинСния.

Когда Ρ‚ΠΈΠΏ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, ΠΎΠ½ являСтся Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ строкого Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСн ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Ρ‡Π»Π΅Π½ΠΎΠΌ объСдинСния:

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² шаблонном Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π΅ объСдинСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ мноТСствСнными:

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ строковыС объСдинСния Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ способ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ Π² простых случаях.

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ объСдинСния Π² Ρ‚ΠΈΠΏΠ°Ρ…

ΠœΠΎΡ‰ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… строк Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ проявляСтся ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ строки Π½Π° основС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ°.

Π¨Π°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ систСмы Ρ‚ΠΈΠΏΠΎΠ²:

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ свойства Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка:

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ²

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ послСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠΌ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° основС частСй строки eventName :

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ on Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅.

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ манипуляций со строками (intrisic string manipulation types)

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ эти Ρ‚ΠΈΠΏΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹:

ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ сСрвСры ΠΎΡ‚ ΠœΠ°ΠΊΠ»Π°ΡƒΠ΄ быстрыС ΠΈ бСзопасныС.

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎ ссылкС Π²Ρ‹ΡˆΠ΅ ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠΊΠ½ΡƒΠ² Π½Π° Π±Π°Π½Π½Π΅Ρ€ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ 10% скидку Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ мСсяц Π°Ρ€Π΅Π½Π΄Ρ‹ сСрвСра любой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *