Typescript generic Ρ‡Ρ‚ΠΎ это

Table of Contents #

Π’Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ являСтся построСниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π»Π°Π΄Π°Π»ΠΈ Π±Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строгим ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ API, Π½ΠΎ ΠΈ Π±Ρ‹Π»ΠΈ доступны для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования. НаиболСС Π³ΠΈΠ±ΠΊΠΈΠ΅ возмоТности для построСния ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ систСмы Π΄Π°ΡŽΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, способныС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ с Ρ‚Π΅ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ сСгодня, ΠΈ с Ρ‚Π΅ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π·Π°Π²Ρ‚Ρ€Π°.

Π’ Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ C# ΠΈ Java, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… инструмСнтов для создания ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования, ΡΠ²Π»ΡΡŽΡ‚ΡΡ обобщСния (Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈΠ»ΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ). Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, способныС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΈΠΌ. Π­Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свои Ρ‚ΠΈΠΏΡ‹.

Здравствуй, ΠΌΠΈΡ€ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ! #

Π‘Π΅Π· использования ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ:

Или ΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΈΠΏ any :

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

ΠœΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ T ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-тоТдСству. Π­Ρ‚Π° T позволяСт ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Π» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ number ), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС T ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС Ρ‚ΠΈΠΏΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния. МоТно ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ. Π’Π°ΠΊΠΎΠΉ способ позволяСт Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… со Π²Ρ…ΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊ Π΅Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Ρƒ.

Ѐункция написана, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… способов. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ β€” ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π² Ρ‚ΠΎΠΌ числС ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚:

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ, вСроятно, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярСн. Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΈ компилятор автоматичСски устанавливаСт T Π½Π° основании Ρ‚ΠΈΠΏΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСдаСтся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ Π½Π΅ пСрСдаСтся явно, Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках ( <> ) β€” компилятор просто ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «myString» ΠΈ установил T Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°. Π₯отя Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ явно ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ссли компилятору Π½Π΅ удаСтся автоматичСски вывСсти Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π² Π±ΠΎΠ»Π΅Π΅ слоТных случаях.

Π Π°Π±ΠΎΡ‚Π° с ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ #

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡƒΡŽ Π½Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ identity :

Π§Ρ‚ΠΎ, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° arg Π² консоль? ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ ΠΈΡΠΊΡƒΡˆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ способом:

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ #

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

Π’ΠΈΠΏ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ схоТ с Ρ‚ΠΈΠΏΠΎΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π³Π΄Π΅ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡƒΠΊΠ°Π·Π°Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ:

Для Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя, Π²Π°ΠΆΠ½ΠΎ лишь, Ρ‡Ρ‚ΠΎΠ±Ρ‹ число Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Ρ‹Π²Π°Π»ΠΎΡΡŒ.

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

Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈΡ‚ нас ΠΊ описанию ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ интСрфСйса. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π» ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠΌ Π΅Π³ΠΎ Π² интСрфСйс:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ трансформировался Π² Π½Π΅Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΈΠ½ΠΎΠ΅. ВмСсто описания ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ обычная, Π½Π΅ обобщСнная функция, которая являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ΠŸΡ€ΠΈ использовании GenericIdentityFn Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ придСтся ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС number ), Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ зафиксировав Ρ‚ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ функция. ΠŸΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΈΡ… случаях Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊ сигнатурС Π²Ρ‹Π·ΠΎΠ²Π°, Π° ΠΊΠΎΠ³Π΄Π° β€” ΠΊ самому интСрфСйсу, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ описании Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ аспСкты Ρ‚ΠΈΠΏΠ° ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ.

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

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ классы #

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ классы ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Π²ΠΈΠ΄, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ интСрфСйсы. Π£ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ список Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках ( <> ) послС ΠΈΠΌΠ΅Π½ΠΈ класса.

Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ с интСрфСйсами, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° самому классу устанавливаСт Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ всС Π΅Π³ΠΎ свойства Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ‚ΠΈΠΏΠΎΠΌ.

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

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ #

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ обобщСнная функция Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½Π° Π½Π΅ смоТСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ:

ВмСсто этого Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ значСния Ρ‚Π΅Ρ… Ρ‚ΠΈΠΏΠΎΠ², Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ свойства:

ИспользованиС Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ограничСниях ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ

МоТно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ограничиваСтся Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свойства ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. НуТно ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ случайно Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ лишнСС свойство, поэтому Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΈΠΏΠ°ΠΌΠΈ:

ИспользованиС Ρ‚ΠΈΠΏΠΎΠ² классов Π² обобщСниях

РСализуя ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ «Ρ„Π°Π±Ρ€ΠΈΠΊΠ°» с использованиСм ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΈΠΏ класса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-конструктора. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ,

Π‘ΠΎΠ»Π΅Π΅ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ свойство ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ конструктором ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ экзСмпляра класса.

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

TypeScript: ΠžΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ (Generics)

БСрия

Π’ Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ… ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ· сСбя прСдставляСт TypeScript, Π·Π°Ρ‡Π΅ΠΌ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ структуры Π±ΡƒΠ΄ΡƒΡ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ Π²Π°ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π° Π½Π° этом надмноТСствС языка JavaScript.

Π’Π°ΠΊΠΆΠ΅, ΠΌΡ‹ вскользь Π·Π°Π΄Π΅Π»ΠΈ Ρ‚Π΅ΠΌΡƒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Π»ΠΈ ΠΎ Ρ‚ΠΈΠΏΠ΅ пСрСсСчСния. БСгодня ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Π½Π° обобщСния

ΠžΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ (ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ) позволяСт Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мСсто для Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρ‘Π½ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с классами.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, описанной Π²Ρ‹ΡˆΠ΅, Ссли Π±Ρ‹ Π² TypeScript Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ.

Всё ΠΊΠ°ΠΊ Π² описании: функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ любого Ρ‚ΠΈΠΏΠ° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΆΠ΅. Однако, это Π½Π΅ совсСм Ρ‚Π°ΠΊ. Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ‚ΠΈΠΏΠ°ΠΌ: Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ°, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΎΠ½ΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связаны. Π“Ρ€ΡƒΠ±ΠΎ говоря, сСйчас ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° number ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° string – это Π²Π°Π»ΠΈΠ΄Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ any ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΏΠΎΠ΄ собой всё Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ.

БСйчас функция прСдставляСт собой Β«Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΉ ящик», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ с ΠΎΠ΄Π½ΠΎΠΉ стороны Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚, Π° с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΠ»ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ‚ – нСпонятно. Π― Π±Ρ‹ сказал, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Β«ΠΎΠ±Π΅Π·Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉΒ» Π² контСкстС Ρ‚ΠΈΠΏΠΎΠ². ΠŸΡ€ΠΈ использовании any Π² качСствС Ρ‚ΠΈΠΏΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния ΠΌΡ‹ ΠΎΠ±Π΅Π·Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· нас Π·Π½Π°Π», Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° являСтся ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.

Π’ ΠΌΠΈΡ€Π΅ C#, тСхничСски, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ identity – это ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π° identity – Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹ΠΉ. ΠŸΡ€ΠΈ этом Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° number ΠΈ повСрхностно прослСдим Π·Π° Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ компилятор опрСдСляСт, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ€Π½Ρ‘Ρ‚ функция.

ЛогичСский Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²

ΠœΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² смущаСт ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π·Π½Π°ΠΊΠΎΠ² «мСньшС» ΠΈ «большС». Для упрощСния создания, чтСния ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ΄ΠΎΠΌ TypeScript ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ логичСского Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ компилятор Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ (логичСски вывСсти) Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ C#, Π² TypeScript Π½Π΅Ρ‚ возмоТности Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° пСрвая функция Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π° вторая – для ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ. НапримСр, Ρ‚Π°ΠΊΠΎΠ΅ Π² TypeScript Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ получится:

Π’Π°ΠΊΠΆΠ΅ стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ компилятор выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли ΠΎΠ½ Π½Π΅ смоТСт Ρ‚ΠΎΡ‡Π½ΠΎ вывСсти Ρ‚ΠΈΠΏ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€-Ρ‚ΠΈΠΏΠ°. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡΠ»ΠΎΠΆΠΈΠ²ΡˆΡƒΡŽΡΡ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹.

Для Ρ‡Π΅Π³ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹

ΠŸΡ€ΠΈ написании ΠΊΠΎΠ΄Π° Π²Ρ‹ всСгда встаётС ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄Π²Π΅ Π²Π΅Ρ‚Π²ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ вас ΠΊ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° с Π½ΡƒΠΆΠ½Ρ‹ΠΌ Π²Π°ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Β«Ρ€Π°ΡΠΏΡƒΡ…Π°Π½ΠΈΡŽΒ» ΠΊΠΎΠ΄Π° ΠΈ нСобходимости Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ – унификация, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΏΠΎΠ΄ собой парамСтричСский ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, Π² основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π»Π΅ΠΆΠΈΡ‚ использованиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ΄Π°, Π½ΠΎ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π½ΡƒΠΆΠ½Ρ‹ для написания ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ².

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ²

Когда ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ) примСняСтся с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, компилятор Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ лишь Ρ‚Π΅ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹Β», Ρ‡Ρ‚ΠΎ совмСстимы с этим Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ случаС, Ссли ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π΅ совмСстимый с ΠΊΠΎΠ΄ΠΎΠΌ Ρ‚ΠΈΠΏ, Ρ‚ΠΎ компилятор ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π‘ΠΎΠ»Π΅Π΅ простой ΠΈ понятный ΠΊΠΎΠ΄

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ компилятор Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ нас ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², это позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мСньшС Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈΠΊΠΎΠ² Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ рассмотрСны Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅. Однако, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ваш стСк ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ построСн Π½Π° TypeScript ΠΈ это Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹ распространяСтС свой ΠΊΠΎΠ΄ Π² скомпилированном Π²ΠΈΠ΄Π΅. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π²Ρ‹ обязаны ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ², Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Π΅Ρ€Π΅Π³Π°Ρ‚ΡŒ своих ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΡ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования вашСго ΠΊΠΎΠ΄Π°.

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ограничСния ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° ΠΊΠΎΠ΄ Π½ΠΈΠΆΠ΅ ΠΈ попытаСмся ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° вопрос: Ρ‡Ρ‚ΠΎ здСсь ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ?

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅, ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ возмоТности ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с этими Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставлСн своим интСрфСйсом, соотвСтствСнно:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a ΠΈ b :

УточнСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ

ВсС ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΉ ΠΏΠΎΠΊΠ΅ΠΌΠΎΠ½ΠΎΠ² Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Π΅Π· TypeScript-Π° ΠΈ структур Π΄Π°Π½Π½Ρ‹Ρ… здСсь Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π½Π΅ получится. Π”Π°Π²Π°ΠΉΡ‚Π΅ напишСм ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ интСрфСйс, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠΊΠ΅ΠΌΠΎΠ½ΠΎΠ²: Ρ‚ΠΈΠΏ, вСс, высота ΠΈ сила Π°Ρ‚Π°ΠΊΠΈ.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с интСрфСйсом ΠΏΠΎΠΊΠ΅ΠΌΠΎΠ½ΠΎΠ², Π½ΠΎ ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ интСрфСйсами, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ обобщСния.

Врядли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ· нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойств Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Ρ‘ дСйствий ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ keyof – это Π³Π°Ρ€Π°Π½Ρ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ имя свойства, ΠΏΡ€ΠΈ этом Π²Π·Π°ΠΌΠ΅Π½ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства, Π½ΠΎ ΠΈ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ.

Ошибок Π½Π΅Ρ‚. Π’ΠΈΠΏΠΎΠ² Π½Π΅Ρ‚. УвСрСнности Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ функция Π½Π΅ просто Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ – Π½Π΅Ρ‚. ИмСнно для этого Π½ΡƒΠΆΠ½Π° статичСская типизация – для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ваша функция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΈ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Π»ΠΈ. Π—Π΄Π΅ΡΡŒ лишь ΠΎΠ΄Π½Π° ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΎΡ‡ΠΊΠ°: Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ, Π° Π½Π΅ ΠΏΡ€ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈ интСрфСйсы

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π½Π΅ обошли стороной ΠΈ интСрфСйсы.

Но это скучно ΠΈ понятно – Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π±ΠΎΠ»Π΅Π΅ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Допустим, имССтся интСфСйс, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΠΎΠ³ΠΎ сСрвиса:

Однако Π½Π΅ ΡΠΏΠ΅ΡˆΠΈΡ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π² Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… сами: Ρ‚ΠΈΠΏ Partial ΡƒΠΆΠ΅ сущСствуСт Π² TypeScript ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ опрСдСлСния.

НСкоторыС встроСнныС Ρ‚ΠΈΠΏΡ‹ для ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π΄Π° ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅, часто встрСчаСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ·ΡŠΡΡ‚ΡŒ ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ свойства, Π° Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ…. НапримСр, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Β«Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Β» Π΄Π°Π½Π½Ρ‹Ρ…. НапишСм Ρ‚Π°ΠΊΠΎΠΉ Β«Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Β», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ Π½Π°ΠΌ Ρ‚ΠΈΠΏΡ‹ ΠΈ структуры, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… всё Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΏΠΎΠΊΠ΅ΠΌΠΎΠ½ΠΎΠ².

Код Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ грязный, Π½ΠΎ я Π½Π΅ смог ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ элСгантного Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ для ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ:

TypeScript ΠΈΠΌΠ΅Π΅Ρ‚ большоС количСство стандартных Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² вашСм ΠΊΠΎΠ΄Π΅ с обобщСниями. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список Π½Π΅ описываСтся Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ описаниС ES5. Π’Π°ΠΊΠΆΠ΅ сущСствуСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒ typescript-collections, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ «стандартныС» структуры Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° TypeScript.

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² классах

Π—Π΄Π΅ΡΡŒ особо Π½Π΅ ΠΎ Ρ‡Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всё Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с обобщСниями Π² интСрфСйсах – ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Π² классах. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ. Π—Π°Ρ‚ΠΎ здСсь ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ± ограничСниях.

Бсылочки

По Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ ΠΎΡΡ‚Π°Π²Π»ΡΡŽ ΠΏΠ°Ρ€Ρƒ ссылочСк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΌΠΎΠ΅ΠΉ стороны, Π½ΠΎ ΠΈ со стороны Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Π²Ρ‚ΠΎΡ€ΠΎΠ². НС ΡƒΠ΄ΠΈΠ²Π»ΡΠΉΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π² ссылках ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ C#, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ TypeScript Π±Π΅Ρ€Ρ‘Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ возмоТности ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ· Π½Π΅Π³ΠΎ – напомню, Ρ‡Ρ‚ΠΎ Ρƒ Π½ΠΈΡ… ΠΎΠ΄ΠΈΠ½ Π°Π²Ρ‚ΠΎΡ€.

ДСлимся Π½Π° ΠΎΠΏΠ»Π°Ρ‚Ρƒ хостинга ΠΈΠ»ΠΈ ΠΊΠΎΡ„Π΅.
Π§Π΅ΠΌ Ρ‡Π°Ρ‰Π΅ пью ΠΊΠΎΡ„Π΅, Ρ‚Π΅ΠΌ Ρ‡Π°Ρ‰Π΅ ΠΏΠΈΡˆΡƒ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

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

ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΠΈ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ

БистСма Ρ‚ΠΈΠΏΠΎΠ² TS позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π½Π° основС Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ².

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ индСксации Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² использовании 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)#

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

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ (Generics)

Из всСго, Ρ‡Ρ‚ΠΎ стало ΠΈ Π΅Ρ‰Ρ‘ станСт извСстным ΠΎ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΌΠΈΡ€Π΅, Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ своС знакомство с Π½ΠΈΠΌ, Ρ‚Π΅ΠΌΠ°, посвящСнная обобщСниям (generics), ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ слоТной. Π₯отя данная Ρ‚Π΅ΠΌΠ°, ΠΊΠ°ΠΊ ΠΈ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅, ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ нюансами, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½, Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, рассматриваСмыС Π² Π½Π΅ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΎΡ‡Π΅Π½ΡŒ просты ΠΈ ΡΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° Π»Π΅Ρ‚Ρƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ΡΡŒ, ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ Π³Π»Π°Π²Ρ‹ мСсто Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ мноТСством вопросов, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ, Π·Π°ΠΉΠΌΠ΅Ρ‚ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ конструкции ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

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

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Generic Programming) β€” это ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌΠΈ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· измСнСния Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ (описания Ρ‚ΠΈΠΏΠ°).

Π’ основС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ программирования Π»Π΅ΠΆΠΈΡ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ понятиС ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ (Generics) β€” это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ°, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², конкрСтизация ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания экзСмпляра. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ°, ΠΏΡ€ΠΈ условии соблюдСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ», ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. ВсС это вмСстС Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ²ΠΎΠ΄ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ вСрсиСй ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΠΎΠ³ΠΎ станка, Ρ‡ΡŒΠΈ замСняСмыС Π²Π°Π»Ρ‹, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для отпСчатывания ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° проходящСй Ρ‡Π΅Ρ€Π΅Π· Π½ΠΈΡ… Π±ΡƒΠΌΠ°Π³Π΅, сопоставимы с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ°.

Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ обобщСния ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒ количСство ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ (ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠΉ) ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΡ€ΠΈ этом ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ.

Π­Ρ‚ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ достаточно для образования ΠΎΡ‚Ρ‡Π΅Ρ‚Π»ΠΈΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ. Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ, стоит ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ значСния Ρ‚Π°ΠΊΠΈΡ… Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСм ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ², ΠΊΠ°ΠΊ: ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ конструкция.

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

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ρ‚ΠΈΠΏ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, обозначаСтся ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. ΠŸΡ€ΠΈ обсуТдСнии Ρ‚ΠΈΠΏΠΎΠ², прСдставляСмых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅. Когда объявлСниС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‚ΠΎ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, Π±ΡƒΠ΄ΡŒ, Ρ‚ΠΎ класс ΠΈΠ»ΠΈ функция, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ (ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс, ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ функция ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄).

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² TypeScript

Π’ TypeScript обобщСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ для Ρ‚ΠΈΠΏΠΎΠ², опрСдСляСмых с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ:

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

Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ, Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹. ΠŸΡ€Π°Π²ΠΈΠ»Π° для классов Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ» для классовых Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· этого, всС дальнСйшиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° классах ΠΈ функциях.

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

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈ объявлСнии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ выраТСния, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ стрСлочноС, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ограничиваСтся ΠΈΡ… сигнатурой ΠΈ Ρ‚Π΅Π»ΠΎΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈ объявлСнии ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² допустимых выраТСниях (аннотация Ρ‚ΠΈΠΏΠ°, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΈ Ρ‚.Π΄.) располоТСнных Π² Ρ‚Π΅Π»Π΅.

ΠŸΡ€ΠΈ объявлСнии классов (Π² Ρ‚ΠΎΠΌ числС классовых Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ) ΠΈ интСрфСйсов, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ объявлСния ΠΈ Ρ‚Π΅Π»ΠΎΠΌ.

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

Если класс/интСрфСйс объявлСн ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ, Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ объявлСн ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ послСдний Π² своСй области видимости Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ (Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно ΠΏΠΎΠ·Π΄Π½Π΅Π΅).

ΠŸΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ° ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ… устанавливаСтся Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ°. ΠŸΡ€ΠΈ этом ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΏΠ°Ρ€Π΅ ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобок, Π° количСство ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ количСству ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ°.

Если ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ указываСтся Π² качСствС Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ ΠΎΠ½ обязан ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ обобщСния (ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π°Π»Π΅Π΅ Π² Π³Π»Π°Π²Π΅).

ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ понятия, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ (open) ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ (closed) Ρ‚ΠΈΠΏ. ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ опрСдСлСния называСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° являСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ссли всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ являСтся Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ.

Π’Π΅ ΠΆΠ΅ самыС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΈ ΠΊ функциям, Π½ΠΎ Π·Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ β€” Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ² для ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² опрСдСляСт ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ° ΠΊ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

И ΠΎΠΏΡΡ‚ΡŒ, эти ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π²Π΅Ρ€Π½Ρ‹ ΠΈ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π’ случаях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ класс содСрТит ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Ρ‚Π΅Π½ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° класса.

Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² TypeScript нСльзя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляры Ρ‚ΠΈΠΏΠΎΠ² прСдставляСмых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ°.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Π²Π° Ρ‚ΠΈΠΏΠ°, опрСдСляСмыС классом ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ трСбуСтся Π² Ρ‚Π΅Ρ… случаях, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ характСристиками, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ для выполнСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ этим Ρ‚ΠΈΠΏΠΎΠΌ.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим случай, ΠΊΠΎΠ³Π΄Π° Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ T ( Collection ) объявлСн ΠΌΠ΅Ρ‚ΠΎΠ΄ получСния элСмСнта ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ( getItemByName ).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ°, Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·Π΄Π½Π΅Π΅.

Π’Π°ΠΊΠΆΠ΅ Π½Π΅ лишним Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ, Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ совмСстимый с Π½ΠΈΠΌ Ρ‚ΠΈΠΏ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π»ΡŽΠ±Ρ‹Π΅ подходящиС для этого Ρ‚ΠΈΠΏΡ‹, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π»ΡŽΠ±Ρ‹ΠΌ доступным ΠΏΡƒΡ‚Π΅ΠΌ.

Помимо ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, TypeScript позволяСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ установки значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠ°. Π’ этом случаС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ€Π°Π²Π½ΠΎ = указываСтся послС Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

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

Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²Π° класса, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π’ этом случаС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с Ρ‚ΠΈΠΏΠΎΠΌ супСркласса ΠΌΠΎΠΆΠ½ΠΎ Π² качСствС значСния ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΅Π³ΠΎ подкласса, Π½ΠΎ β€” Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Π’ΠΎΡ‚ ΠΆΠ΅ самый ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ°.

Π’ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ указываСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Ρ‚ΠΈΠΏΠ° Π² качСствС Ρ‚ΠΈΠΏΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚.

НС Π±ΡƒΠ΄Π΅Ρ‚ лишним Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ отличия этих Π΄Π²ΡƒΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠΎΠ².

Если обобщСнная коллСкция Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ объСдинСниС ( Union ), Ρ‚ΠΎ всС Π΅Ρ‘ элСмСнты Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊ Ρ‚ΠΈΠΏΡƒ объСдинСния. ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами, элСмСнт ΠΈΠ· Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Π±Π΅Π· явного прСобразования, совмСстим Π½ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏ объСдинСниС.

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

Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ привСдСния Ρ‚ΠΈΠΏΠΎΠ² прямо Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ повысило β€œΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒβ€ ΠΊΠΎΠ΄Π°. Но, всС ΠΆΠ΅, Π² случаях, ΠΊΠΎΠ³Π΄Π° элСмСнт ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ присваиваСтся конструкции Π±Π΅Π· явной Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ°, появляСтся ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ°.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… объявлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ° нСсовмСстимы, Π΄Π°ΠΆΠ΅ Ссли Ρƒ Π½ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹.

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

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

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