Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

TypeScript: ΠΊΠ°ΠΊ с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Ρ‡Π΅ΠΌ ΠΎΠ½ отличаСтся ΠΎΡ‚ JavaScript

Frontend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΡˆΠ°Π³Π½ΡƒΠ»Π° Π΄Π°Π»Π΅ΠΊΠΎ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ JavaScript. РазбираСмся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ TypeScript ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π΅Π³ΠΎ Ρ‚Π°ΠΊ Π»ΡŽΠ±ΡΡ‚.

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

На JavaScript написаны Π²Π΅Π±-интСрфСйсы практичСски всСх сайтов. Однако Π½Π΅ всС Π΅Π³ΠΎ Π»ΡŽΠ±ΡΡ‚, Π° Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ² ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅Ρ‚. ЕдинствСнный ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚ JS β€” WebAssembly, ΠΎΠ΄Π½Π°ΠΊΠΎ Π·Π° нСсколько Π»Π΅Ρ‚ своСго сущСствования ΠΎΠ½ ΠΏΠΎΠΊΠ° Π½Π΅ смог ΡΡ‚Π°Ρ‚ΡŒ достаточно популярным.

Из-Π·Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ расклада Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² остаётся Π΄Π²Π° Π²Ρ‹Ρ…ΠΎΠ΄Π°:

И ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π·Π° послСдниС Π³ΠΎΠ΄Ρ‹ появилось сразу нСсколько языков-надстроСк Π½Π°Π΄ JavaScript:

О послСднСм ΠΈ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅. Π’ 2019 Π³ΠΎΠ΄Ρƒ TypeScript стал ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· самых Π»ΡŽΠ±ΠΈΠΌΡ‹Ρ… языков программирования ΠΈ ΠΏΠΎΠΏΠ°Π» Π² Ρ‚ΠΎΠΏ-10 ΠΏΠΎ популярности:

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

ΠŸΠΈΡˆΠ΅Ρ‚ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π² свободноС врСмя создаСт ΠΈΠ³Ρ€Ρ‹. ΠœΠ΅Ρ‡Ρ‚Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ свою ΡΡ‚ΡƒΠ΄ΠΈΡŽ ΠΈ Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π»Π°ΠΌΠΏΠΎΠ²Ρ‹Π΅ RPG.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ TypeScript

TypeScript β€” это язык программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ исправлСны ΠΌΠ½ΠΎΠ³ΠΈΠ΅ нСдостатки JavaScript. Код Π½Π° TypeScript выглядит ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ΄ Π½Π° JS, ΠΈ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ frontend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ TypeScript достаточно просто. ОсобСнно учитывая, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ JS-ΠΊΠΎΠ΄ прямо Π² TS-скриптах.

Код Π½Π° TypeScript компилируСтся Π² JS ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π»ΡŽΠ±Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ΄ Π»ΡŽΠ±Ρ‹Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ β€” Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ JS, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ΄.

TypeScript β€” ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, поэтому ΠΎΠ½ ΠΎΡ‡Π΅Π½ΡŒ быстро развиваСтся. МногоС, Ρ‡Ρ‚ΠΎ появляСтся Π² TS, ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈ Π² JavaScript: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, let ΠΈ const, стрСлочныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π΄Π²Π° Π³Π»Π°Π²Π½Ρ‹Ρ… прСимущСства TS ΠΏΠ΅Ρ€Π΅Π΄ JS.

Бтрогая типизация

МногиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² JavaScript ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ·-Π·Π° динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ странного повСдСния Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…:

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

Π’ TypeScript типизация статичСская, Ρ‡Ρ‚ΠΎ избавляСт ΠΎΡ‚ мноТСства ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π•ΡΡ‚ΡŒ числовой Ρ‚ΠΈΠΏ, строковый, логичСский ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈ свои Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ enum:

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠ΅ ООП

И Π² JS, ΠΈ Π² TS Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования: классы, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, наслСдованиС. Однако TypeScript ΡˆΠ°Π³Π½ΡƒΠ» Ρ‡ΡƒΡ‚ΡŒ дальшС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ большС возмоТностСй ОПП. Π’ Ρ‚ΠΎΠΌ числС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, интСрфСйсы:

Π”Ρ€ΡƒΠ³ΠΎΠΉ большой плюс β€” ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа. Π˜Ρ… Π² TypeScript Ρ‚Ρ€ΠΈ: public, private ΠΈ protected. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡ… использования:

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности:

Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ всё это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ ΠΈ Π² JavaScript, Π½ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ возмоТности Π΅Ρ‰Ρ‘ ΠΎΡ‡Π΅Π½ΡŒ нСскоро.

ΠœΠΈΠ½ΡƒΡΡ‹ TypeScript

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π»ΡŽΠ±ΡΡ‚ этот язык, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΡƒΠΆΠ΅ пСрСходят Π½Π° Π½Π΅Π³ΠΎ. НапримСр, популярный Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Angular.JS. Но этого всё Ρ€Π°Π²Π½ΠΎ нСдостаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ стал Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ вострСбованным, ΠΊΠ°ΠΊ JavaScript. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π΅Π±-прилоТСния Π½Π° TypeScript стоит Π΄ΠΎΡ€ΠΎΠΆΠ΅ ΠΈ ΠΎΡ‚Π½ΠΈΠΌΠ°Π΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ОсобСнно Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈΠ»ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π° TS. Π’ этом случаС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ придётся ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ сигнатуры (ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…) всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² β€” достаточно Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСсс, учитывая Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ соврСмСнных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ€ΠΎΠ³ Π²Ρ…ΠΎΠ΄Π° Π² TypeScript Π²Ρ‹ΡˆΠ΅ β€” Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ прСимущСства, Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Установка TypeScript

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ TypeScript, установитС сначала Node.JS. Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² нашСй ΡΡ‚Π°Ρ‚ΡŒΠ΅. ПослС этого Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π² консоли ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Если всё ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚ΠΎ Π² ΠΏΠ°ΠΏΠΊΠ΅ появится Ρ„Π°ΠΉΠ» app.js, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΊ страницС.

Π’ compilerOptions хранятся всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для компилятора:

ПишСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° TypeScript

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создадим простой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΈ посмотрим, ΠΊΠ°ΠΊ отличаСтся ΠΊΠΎΠ΄ для Π½Π΅Π³ΠΎ Π½Π° JS ΠΈ Π½Π° TS. Π‘Π½Π°Ρ‡Π°Π»Π° свСрстаСм Ρ„ΠΎΡ€ΠΌΡƒ:

Π—Π΄Π΅ΡΡŒ Π΄Π²Π° поля для Π²Π²ΠΎΠ΄Π° чисСл, ΠΊΠ½ΠΎΠΏΠΊΠ°, которая запускаСт скрипт ΠΈ элСмСнт для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°:

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

Код TypeScript выглядит Ρ‚Π°ΠΊ:

А скомпилированный JS-ΠΊΠΎΠ΄ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° выглядит Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

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

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π² TypeScript ΠΎΡ‡Π΅Π½ΡŒ достойный синтаксис, JavaScript Π΅Ρ‰Ρ‘ Π΄ΠΎΠ»Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ frontend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΅Π³ΠΎ Π² любом случаС Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ Π²Π°ΠΌ Π½Π΅ нравится.

Если Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ приступаСтС ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ программирования, Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с TypeScript Π±ΡƒΠ΄Π΅Ρ‚ слоТно. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒΡΡ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° наш курс ΠΏΠΎ frontend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ β€” Π²Ρ‹ освоитС HTML, CSS, JS ΠΈ Π΅Π³ΠΎ популярныС Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ.

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

TypeScript ΠΈ React с использованиСм create-react-app: пошаговоС руководство ΠΏΠΎ настройкС вашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ прилоТСния

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

Из этого Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ быстро ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ созданию ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ React с использованиСм TypeScript Π±Π΅Π· нСобходимости ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ настройки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ create-react-app (CRA). ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΡƒΠΆΠ΅ установлСны Node ΠΈ NPM. Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ TypeScript/React Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сразу послС установки Π±Π΅Π· нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ CRA. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свои собствСнныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ props ΠΈ state, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ TypeScript.

Установка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ create-react-app

create-react-app это инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ прилоТСния React с Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌΠΈ настройками ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π­Ρ‚ΠΎΡ‚ шаг Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ. TypeScript ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ npx, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ React с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ TypeScript

Π’Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ create-react-app с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ TypeScript, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ React с использованиСм TypeScript Π² качСствС синтаксиса JS ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π­Ρ‚ΠΎ создаст ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ структуру ΠΏΠ°ΠΏΠΎΠΊ:

НиТС описаниС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части:

ИзмСнСния React под TypeScript

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ React с TypeScript, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ внСсти нСбольшиС измСнСния Π² ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ создания стандартного прилоТСния React.

Π˜ΠΌΠΏΠΎΡ€Ρ‚ React ΠΈ ReactDOM

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

Π‘ TypeScript Π²Ρ‹ большС Π½Π΅ смоТСтС Π΄Π΅Π»Π°Ρ‚ΡŒ стандартныС ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ Ρ„ΠΈΠ΄Π°:

React экспортируСтся ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ CommonJS, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ default export. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ, Π° просто Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ React, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π». Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ свои ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΊΠ°ΠΊ:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

Π’Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ интСрфСйс props для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π’Ρ‹ опрСдСляСтС интСрфСйс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π³Π΄Π΅ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ свой Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ интСрфСйс для состояния (state) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±Π΅Π· хранСния состояния

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ с props, ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ

НачнСм с ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° React. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ объявляСм интСрфСйс IProps с СдинствСнным ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ name. ΠœΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, это задаСтся симфолом β€œ?”. ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ string ΠΈΠ»ΠΈ undefined.

ΠŸΡ€ΠΈ создании ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Header, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° React.SFC

. Β«SFCΒ» ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±Π΅Π· сохранСния состояния Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ. Π₯отя это объявлСниС Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΎΠ½ΠΎ позволяСт Π½Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ defaultProps.

Π”Π°Π»Π΅Π΅, ΠΌΡ‹ объявляСм Ρ‚ΠΈΠΏ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊΠ°ΠΊ IProps, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠΉΡΡ Π½Π° созданный Π½Π°ΠΌΠΈ интСрфСйс.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ класса

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ основы ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° класса, ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ описаниС

Π² App.tsx Π½Π° счСтчик. Одним ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ классом ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ класса ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ своС собствСнноС состояниС. Π”Ρ€ΡƒΠ³ΠΈΠΌ основным ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ доступа ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, описаниС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ руководства.

ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с объявлСния интСрфСйса для IProps ΠΈ IState. Π‘ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ счСтчик Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² счСтчика, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ приращСния. Π‘Π°ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ вСсти подсчСт, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ своС состояниС.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ объявлСн с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ IProps ΠΈ IState ΠΊΠ°ΠΊ class Description extends React.Component < ΠΈ defaultProps объявлСн ΠΊΠ°ΠΊ статичСская пСрСмСнная. State инициализируСтся со счСтчиком 0.

Π’Π°ΡˆΠ΅ create-react-app с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ TypeScript

Π’Π½ΡƒΡ‚Ρ€ΠΈ нашСго App.tsx ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ замСняСм HTML ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠ· CRA. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ name ΠΈ countBy Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ°ΠΌ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ props ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ undefined, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ defaultProps.

И это всС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с TypeScript Π² React! Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ запуститС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² консоли:

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

ИспользованиС React JSX вмСстС с TypeScript 1.6

НС Ρ‚Π°ΠΊ Π΄Π°Π²Π½ΠΎ Microsoft объявила ΠΎ выпускС TypeScript 1.6 Beta, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· интСрСсных, Π½Π° ΠΌΠΎΠΉ взгляд, Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ являСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° React/JSX, Ρ‡Ρ‚ΠΎ Π² совокупности с особСнностями TypeScript’Π° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ возмоТности.

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

Π― расскаТу ΠΎ Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΎΠΏΡ‹Ρ‚Π΅ β€” ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ связку TypeScript + React, с ΠΊΠ°ΠΊΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ столкнулся ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… Ρ€Π΅ΡˆΠ°Π». А Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΠΊΠ°ΠΆΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ gulp-тасков для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΈ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ ΠΊΠΎΠ΄ минимального todo прилоТСния Π½Π° TypeScript + React (ссылка Π½Π° Github).

TypeScript 1.6

Π’ΠΎΡ‚ основныС измСнСния ΠΈ дополнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ принСсло это ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅:

Найтивная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° JSX

Β«Π’Π°Ρƒ!Β» β€” Π²ΠΎΡ‚ пСрвая ΠΌΡ‹ΡΠ»ΡŒ, ΠΊΠΎΠ³Π΄Π° я ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» анонс. Но дальшС Π½Π°Ρ‡Π°Π»ΠΈΡΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ нСльзя просто Π²Π·ΡΡ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ edge-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, поэтому ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ классный Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² консоли, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ со сборкой ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠ΅ΠΌ нашСго ΠΊΠΎΠ΄Π°.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ нас установлСны ΠΈ настроСны Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ вСрсии nodejs ΠΈ npm.

Установка TypeScript 1.6 Beta

Для установки TypeScript 1.6 Beta Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

ПослС этого Ρƒ вас Π² консолС Π±ΡƒΠ΄Π΅Ρ‚ доступна ΠΊΠΎΠΌΠ°Π½Π΄Π° tsc β€” это собствСнно ΠΈ Π΅ΡΡ‚ΡŒ компилятор для TypeScript. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Ρ‡Ρ‚ΠΎ Ρƒ вас установлСна вСрсия 1.6-beta.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ всё ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

Для локальной установки Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ package.json

Π€Π°ΠΉΠ» package.json содСрТит Π² сСбС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ: Π½Π°Π·Π²Π°Π½ΠΈΠ΅, вСрсия, зависимости ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅. Π›ΡŽΠ±Π°Ρ дирСктория, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ этот Ρ„Π°ΠΉΠ», интСрпрСтируСтся ΠΊΠ°ΠΊ Node.js-ΠΏΠ°ΠΊΠ΅Ρ‚, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

Бпособ использования Ρ„Π°ΠΉΠ»Π° package.json зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Π»ΠΈ Π²Ρ‹ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠ»ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ. Π’ нашСм случаС ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ список зависимостСй нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ gulpfile.js

Π’ качСствС сборщика ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° я использовал gulp, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎ ΠΌΠ½Π΅, особой Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π½Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π³Π»Π°Π²Π½ΠΎΠ΅ β€” идСя. Для сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ npm ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ: gulp-typescript для компиляции TypeScript ΠΈ browserify для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с зависимостями нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

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

Васк для компиляции TypeScript выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ использали Ρ€Π°Π½Π΅Π΅ рассмотрСнный Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ β€” Π½Π° github страницС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

browserify

Васк для создания Π±Π°Π½Π΄Π»Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ index.html

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ со статичСскими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΈΡ… копирования Π² gulp ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ gulp-таска для копирования index.html Π² ΠΏΠ°ΠΏΠΊΡƒ dist:

gulpfile.js Ρ„Π°ΠΉΠ»

Π’ΠΎΠ³Π΄Π° вСсь gulpfile.js Π±ΡƒΠ΄Π΅ΠΌ Ρ‚Π°ΠΊΠΈΠΌ:

TypeScript Definitions

Π― сСйчас Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° описании TypeScript Definitions, ΠΎΠ± этом написано ΠΌΠ½ΠΎΠ³ΠΎ классных статСй. Π‘ΠΊΠ°ΠΆΡƒ лишь, Ρ‡Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ написанныС Π½Π° JS для Π½ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти самыС TypeScript Definitions. И Π΅ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Ρ†Π΅Π»Ρ‹ΠΉ опСнсорсный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π°Ρ€ΠΎΠ΄ ΠΏΠΈΡˆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡˆΠ΅Π½Ρ‹ для популярных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° сайтС, Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½ΡƒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ которая этот процСсс упростит:

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΌΡ‹ скачаСм definitions для React ΠΈ сохраним Π² Ρ„Π°ΠΉΠ» tsd.json запись ΠΎ TypeScript Definition:

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ находится Π² open-source, развиваСтся ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ поддСрТиваСтся сообщСством β€” borisyankov/DefinitelyTyped.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ tsconfig.json

Π€Π°ΠΉΠ» tsconfig.json Ρ…Ρ€Π°Π½ΠΈΡ‚ настройки компиляции для вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» поддСрТиваСтся компилятором начиная с вСрсии 1.5. ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ tsconfig.json, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ для React/JSX выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

React-ΠΊΠΎΠ΄

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ связки TypeScript + React ΠΌΡ‹ напишСм минимальноС todo ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

todoItem.tsx ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

Начнём с самого малСнького ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠ°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ β€” TodoItem. Π”ΠΎΠ±Π°Π²ΠΈΠΌ TypeScript Definition для React Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ„Π°ΠΉΠ»Π°:

Π—Π°Ρ‚Π΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ React Π² наш класс:

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ интСрфСйс ITodo для элСмСнта:

А Ρ‚Π°ΠΊΠΆΠ΅ интСрфСйсы для состояния ΠΈ свойств нашСго ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

Π’ΠΎΠ³Π΄Π° сам ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

main.tsx ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

Π”Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ‚ΠΎΡ‚ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π² TodoItem ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅, поэтому ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ листинг Ρ„Π°ΠΉΠ»Π°:

bootstrap.ts

Π”Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» слуТит Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ для старта прилоТСния ΠΈ содСрТит Π»ΠΎΠ³ΠΈΠΊΡƒ для Π²Ρ‹Π·ΠΎΠ²Π° основого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

index.html

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π½Π΅ добавляляли Π½ΠΈΠΊΠ°ΠΊΠΈΡ… стилСй ΠΈ Ρ‚Π΄, Ρ‚ΠΎ исходный ΠΊΠΎΠ΄ Ρ„Π°ΠΉΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

Запуск ΠΈ Ρ„Π΅ΠΉΠ΅Ρ€Π²Π΅Ρ€ΠΊΠΈ

Установка ΠΈ компиляция

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΈ созданы всС Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΠ°ΠΏΠΊΠΈ ΠΈ таски, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ:

для установки всСх ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ:

для компиляции нашСго прилоТСния.

Запуск

Π’ΡƒΡ‚ всё ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΎΠ·Π°ΠΈΡ‡Π½ΠΎ β€” Π½Π°Ρ‚Ρ€Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ сСрвСр Π½Π° ΠΏΠ°ΠΏΠΊΡƒ dist ΠΈ радуСмся ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ:

Π—Π°Ρ‚Π΅ΠΌ ΠΈΠ΄Ρ‘ΠΌ Π½Π° localhost:3000/index.html ΠΈ тСстируСм.

ВмСсто Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ прСдставлСнный Π² этом ΠΌΠΈΠ½ΠΈ-Π³Π°ΠΉΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ ссылкС. Π›ΡŽΠ±Ρ‹Π΅ замСчания ΠΈ прСдлоТСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ.

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

⚛️ 12 совСтов ΠΏΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΡŽ TypeScript Π² React-прилоТСниях

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

Π‘Π΅Ρ€Π³Π΅ΠΉ ΠšΡ€Π°Π²Ρ‡Π΅Π½ΠΊΠΎ

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ TypeScript Π² React?

React – это JavaScript-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… интСрфСйсов, Π° TypeScript – Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ надмноТСство JavaScript. ОбъСдиняя ΠΈΡ…, ΠΌΡ‹ создаСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ интСрфСйсы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ JavaScript. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ мСньшСС количСство ошибок, отправляСмых Π²ΠΎ внСшний интСрфСйс.

НС сущСствуСт СдинствСнного ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ способа написания ΠΊΠΎΠ΄Π° React с использованиСм TypeScript. Как ΠΈ Π² случаС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ тСхнологиями, Ссли ваш ΠΊΠΎΠ΄ компилируСтся ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π²Ρ‹, вСроятно, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ сдСлали ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΊ совмСстному использованию с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ TypeScript

Bit.dev стал популярной Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ способ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΈΠ· любой ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹.

Боздавая ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с использованиСм React с TS, Π²Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ваши ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π»Π΅Π³ΠΊΠΎ понятны Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ. Π­Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ способ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Настройка ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ tsconfig.json

Π‘Π°ΠΌΡ‹ΠΉ быстрый способ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ React/TypeScript – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ create-react-app с шаблоном TypeScript:

tsconfig.json это Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ TypeScript. Π€Π°ΠΉΠ» содСрТит ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ настройки, Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ нСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² с пояснСниями:

Enums

Enums опрСдСляСт Π½Π°Π±ΠΎΡ€ связанных констант ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΎΠΉ сущности.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΈ Ρ‚ΠΈΠΏΡ‹

Π§Ρ‚ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ – интСрфСйсы ΠΈΠ»ΠΈ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ²? Π₯отя эти сущности ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹, Π½Π° Π΄Π΅Π»Π΅ ΠΎΠ½ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ:

ЕдинствСнная функция интСрфСйсов, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² – это объСдинСниС Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΉ.

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ элСмСнтов HTML

Иногда ваши ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠ°ΠΊ собствСнныС HTML-элСмСнты. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΊΠ°ΠΊ собствСнный элСмСнт HTML ΠΈΠ»ΠΈ Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅.

Π’ΠΈΠΏΡ‹ событий

React ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный Π½Π°Π±ΠΎΡ€ событий, поэтому Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ события HTML. Однако Ρƒ вас Π΅ΡΡ‚ΡŒ доступ ΠΊ событиям ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΡΡΡ‹Π»Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° Π½ΠΈΡ… Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ»ΠΈ просто Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΈΠ· React ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ограничСния элСмСнтов Generics с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ событий.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ объСдинСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° нСсколькими ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°

Π‘Ρ‚ΠΎΠΈΡ‚ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ index.d.ts ΠΈ global.d.ts Π² React. Оба ΠΎΠ½ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ добавляСтС React Π² свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π­Ρ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ содСрТат опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² ΠΈ интСрфСйсов: Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ свойства ΠΈΠ»ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ эти Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΡ… содСрТимоС.

index.d.ts » data-src=»https://media.proglib.io/posts/2021/01/20/bf2cf9687a65d39e7bd4506bfdbd507a.png» > index.d.ts

ESLint/Prettier

Π§Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ваш ΠΊΠΎΠ΄ соотвСтствуСт ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° ΡΡ‚ΠΈΠ»ΡŒ согласован, рСкомСндуСтся Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ESLint ΠΈ Prettier :

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈ настройки ΠΊΠΎΠ΄Π° VS

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг ΠΏΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ – автоматичСскоС исправлСниС ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ настройка ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ сохранСнии.

УстановитС ESLint ΠΈ Prettier для VS Code. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ESLint Π»Π΅Π³ΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с вашим Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈΠ»ΠΈ интСрфСйс Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния состояния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

Однако, Ссли Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для вашСго Ρ…ΡƒΠΊΠ° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ null, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Π½Π΅ сработаСт. Для этих случаСв TypeScript позволяСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ:

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° событий Ρ„ΠΎΡ€ΠΌΡ‹

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ свойств ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

МоТно Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ свойства, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΈ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ сначала посмотрим, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ type:

Если Π²Ρ‹ использовали interface, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ extends, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Π½ΠΎ придСтся внСсти ΠΏΠ°Ρ€Ρƒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

ΠœΡ‹ часто Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ сторонниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ React ΠΈ TypeScript. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях стоит ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ @types с опрСдСлСниями Ρ‚ΠΈΠΏΠΎΠ²:

Π˜Ρ‚ΠΎΠ³ΠΈ

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

Π‘Ρ‚Π°Ρ€Ρ‚ΡƒΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π° React ΠΈ TypeScript

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

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

TL/DR: Код Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ ΠΊ старту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° github

К Π·Π°Π΄Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΡ‚ΠΈ с Π΄Π²ΡƒΡ… сторон:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ Ρ…ΠΎΡ€ΠΎΡˆ для быстрого старта, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ², ΠΊΡ‚ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚ с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈ Π² Ρ‡Ρ‘ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π±ΠΈΠ±ΠΈΠ»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ прилоТСния.

Π’Π½Π°Ρ‡Π°Π»Π΅ я ΠΏΠΎΡˆΡ‘Π» ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡƒΡ‚Ρ‘ΠΌ, Π½ΠΎ Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅ΡˆΠΈΠ» ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости ΠΈ ΠΏΡ€ΠΈΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΏΠ°Ρ€Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΈ Ρ‚ΡƒΡ‚ ΠΏΠΎΡΡ‹ΠΏΠ°Π»ΠΈΡΡŒ всякиС ошибки ΠΈ нСсостыковки. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π·Π°ΠΊΠ°Ρ‚Π°Π» Ρ€ΡƒΠΊΠ°Π²Π° ΠΈ сдСлал всё сам. Но Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Ρ‚Π°ΠΊΠΈ упомяну.

Create React Library

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅Π»ΠΈ Π΄Π΅Π»ΠΎ с React ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΏΡ€ΠΎ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ стартСр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° React, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт свСсти ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ ΠΈ прСдоставляСт Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹Π΅ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Ρ‹ β€” Create React App (CRA). Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (ΠΈ Π΅ΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π° Ρ…Π°Π±Ρ€Π΅). Однако, структура ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ui-kit Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ SPA. Нам Π½ΡƒΠΆΠ΅Π½ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с исходниками ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (src), пСсочница для ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ (example), инструмСнт докумСнтирования ΠΈ дСмонстрации («Π²ΠΈΡ‚Ρ€ΠΈΠ½Π°») ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΊ экспорту Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ (dist). Π’Π°ΠΊΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² SPA ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· индСксный Ρ„Π°ΠΉΠ». ΠŸΠΎΠ΄ΡƒΠΌΠ°Π² ΠΎΠ± этом, я отправился Π½Π° поиски ΠΈ быстро ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ CRA ΠΏΠ°ΠΊΠ΅Ρ‚ β€” Creat React Library (CRL).

CRL, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ CRA, являСтся «easy-to-use» CLI-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Он Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ:

Для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ(npx позволяСт Π½Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ глобально):

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

И Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ сгСнСрированный ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Tsx Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

На сСгодняшний дСнь зависимости Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅, поэтому я Ρ€Π΅ΡˆΠΈΠ» ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡ… всСх Π΄ΠΎ послСдних вСрсий с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ npm-check:

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΠΌ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-пСсочница Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ example гСнСрируСтся Π½Π° js. ΠŸΡ€ΠΈΠ΄Ρ‘Ρ‚ΡΡ Ρ€ΡƒΠΊΠ°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° TypeScript, Π΄ΠΎΠ±Π°Π²ΠΈΠ² tsconfig.json ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависимости (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сам typescript ΠΈ основныС @types ).

Бпасибо ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ StanEgo, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рассказал ΠΏΡ€ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ Create React Library β€” tsdx. Π­Ρ‚Π° cli-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° CRA ΠΈ Π² ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ создат основу для вашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с настроСнным Rollup, TS, Prettier, husky, Jest ΠΈ React. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ React ΠΈΠ΄Ρ‘Ρ‚ ΠΊΠ°ΠΊ опция. Достаточно просто Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:

И Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄ΡƒΡ‚ установлСны Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ свСТиС вСрсии ΠΏΠ°ΠΊΡ‚ΠΎΠ² ΠΈ сдСланы всС настройки. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° CRL ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ CRL β€” Zero-config. Π’. Π΅. ΠΊΠΎΠ½Ρ„ΠΈΠ³ Rollup скрыт ΠΎΡ‚ нас Π² tsdx (Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Π΅Ρ‚ CRA).

Быстро ΠΏΡ€ΠΎΠ±Π΅ΠΆΠ°Π²ΡˆΠΈΡΡŒ ΠΏΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, я Π½Π΅ Π½Π°ΡˆΡ‘Π» Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Ρ… способов Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ eject ΠΊΠ°ΠΊ Π² CRA. Заглянув Π² issue ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° Ρ‚Π°ΠΊΠΎΠΉ возмоТности Π½Π΅Ρ‚. Для ΠΊΠ°ΠΊΠΈΡ…-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ, Π² этом случаС придётся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ€ΡƒΠΊΠ°ΠΌΠΈ. Если ΠΆΠ΅ Π²Π°ΠΌ это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ρ‚ΠΎ tsdx ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ способ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ быстро Π½Π°Ρ‡Π°Ρ‚ΡŒ.

Π‘Π΅Ρ€Ρ‘ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² свои Ρ€ΡƒΠΊΠΈ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ установим ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ react ΠΈ react-dom ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ types (Ρ‚.ΠΊ. ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΈΠ»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π° TypeScript) ΠΊΠ°ΠΊ devDependencies (ΠΊΠ°ΠΊ ΠΈ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅):

Rollup

Для сборки Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Rollup, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π» CRL. НСобходимыС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³, я подсматривал Ρ‚Π°ΠΊΠΆΠ΅ Ρƒ CRL. Π’ΠΎΠΎΠ±Ρ‰Π΅ ΡΠ»Ρ‹ΡˆΠ°Π» ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Rollup Ρ…ΠΎΡ€ΠΎΡˆ для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π° Webpack для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Однако, я Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π» Webpack (ΠΌΠ½Π΅ Ρ…Π²Π°Ρ‚Π°Π»ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π·Π° мСня CRA), Π½ΠΎ Rollup Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆ, прост ΠΈ красив.

Π’ package.json Π΄ΠΎΠ±Π°Π²ΠΈΠΌ поля с расплоТСниСм собранных Π±Π°Π½Π΄Π»ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠ°ΠΊ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π°ΠΌ rollup β€” pkg.module:

ΠšΠΎΠ½Ρ„ΠΈΠ³ прСдставляСт собой js-Ρ„Π°ΠΉΠ», Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ экспортируСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ ΠΏΠΎΠ»Π΅ input ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ прописаны экспорты для нашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. output β€” описываСт наши оТидания Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ β€” Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΡƒΠ΄Π° Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈ экспортный Ρ„Π°ΠΉΠ»

Π’Π°ΠΊΠΆΠ΅ Π² src Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ объявлСн Ρ‚ΠΈΠΏ для css ΠΈ svg (подсмотрСно Ρƒ CRL).

Π”Π°Π»Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ нСсколько инструмСнтов для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ качСства нашСго процСсса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Π—Π°Π±Ρ‹Π²Π°Π΅ΠΌ ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° с Prettier

Π’Π΅Ρ€ΠΏΠ΅Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠ³Ρƒ Π² code-review ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½Π΅Π±Ρ€Π΅ΠΆΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ нСстандартноС для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π° Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠΏΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ Π½Π΅Π³ΠΎ. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π½Π΅Π΄ΠΎΡ‡Ρ‘Ρ‚Ρ‹ СстСствСнно Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ исправлСны, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π΄Π΅Π»Π°Π΅Ρ‚, Π° Π½Π΅ ΠΊΠ°ΠΊ ΠΎΠ½ выглядит. Π­Ρ‚ΠΈ исправлСния β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ. Π•ΡΡ‚ΡŒ прСкрасный ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΠΎΠ΄ эту Π·Π°Π΄Π°Ρ‡Ρƒ β€” prettier. Установим Π΅Π³ΠΎ:

Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ для нСбольшого уточнСния ΠΏΡ€Π°Π²ΠΈΠ» форматирования.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ ΠΆΠ΄Π°Ρ‚ΡŒ форматирования Π΄ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ prettier постоянно срабатывал Π½Π° ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² процСссС нашСй Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π”Π°, Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΠΊΠ΅Ρ‚ β€” onchange. Он позволяСт ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° измСнСниями Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для Π½ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. УстанавливаСм:

Π—Π°Ρ‚Π΅ΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ поля scripts Π² package.json добавляСм:

На этом всС споры ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π²Π°Π½ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ.

ИзбСгаСм ошибок с ESLint

ESLint ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ стал стандартом ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ практичСски Π²ΠΎ всСх js ΠΈ ts-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Нам ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚. Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ESLint я Π΄ΠΎΠ²Π΅Ρ€ΡΡŽ CRA, поэтому просто Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ· CRA ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π² Π½Π°ΡˆΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ для TS ΠΈ prettier (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ESLint ΠΈ prettier ):

Настроим ESLint с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

ВСстируСм с Jest

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ тСсты для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, установим ΠΈ сконфигурируСм Jest β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ тСстирования ΠΎΡ‚ facebook. Однако, Ρ‚.ΠΊ. ΠΌΡ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ TS Π½Π΅ Ρ‡Π΅Ρ€Π΅Π· babel 7, Π° Ρ‡Π΅Ρ€Π΅Π· tsc, Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ ts-jest:

Π§Ρ‚ΠΎΠ±Ρ‹ jest Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ воспринимал ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ css ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΌΠΎΠΊΠ°ΠΌΠΈ. Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ __mocks__ ΠΈ создаём Ρ‚Π°ΠΌ Π΄Π²Π° Ρ„Π°ΠΉΠ»Π°.
styleMock.ts :

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создаём ΠΊΠΎΠ½Ρ„ΠΈΠ³ jest.

НапишСм ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ тСст для нашСго ExampleComponent Π² Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ Π»ΡŽΠ±ΡƒΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ с Storybook

КаТдая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° нуТдаСтся Π² Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для Π΅Ρ‘ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ использвания. Π§Ρ‚ΠΎ касаСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² интСрфСйса, Ρ‚ΠΎ ΠΏΡ€ΠΎ Π½ΠΈΡ… Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ хочСтся ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ выглядят, Π° Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΡ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ. Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ‚Π°ΠΊΠΎΠΉ Ρ…ΠΎΡ‚Π΅Π»ΠΊΠΈ Π΅ΡΡ‚ΡŒ нСсколько Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. РаньшС я использовал Styleguidist. Π­Ρ‚ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ позволяСт ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ markdown, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π² Π½Π΅Ρ‘ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ описываСмых React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π”Π°Π»Π΅Π΅ докумСнтация собираСтся ΠΈ ΠΈΠ· Π½Π΅Ρ‘ получаСтся сайт-Π²ΠΈΡ‚Ρ€ΠΈΠ½Π°-ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΎ Π½Ρ‘ΠΌ, ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ‚Ρ‹ΠΊΠ°Ρ‚ΡŒ Π² Π½Π΅Π³ΠΎ ΠΏΠ°Π»ΠΎΡ‡ΠΊΠΎΠΉ.

Однако Π² этот Ρ€Π°Π· я Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ ΠΊ Π΅Π³ΠΎ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Ρƒ β€” Storybook. На сСгодняшний ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½ каТСтся Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ с Π΅Π³ΠΎ систСмой ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ постоянно развиваСтся, ΠΈΠΌΠ΅Π΅Ρ‚ большоС сообщСство ΠΈ скоро Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ‡Π½Ρ‘Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои страницы Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ markdown-Ρ„Π°ΠΉΠ»ΠΎΠ². Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ достоинство Storybook это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ являСтся пСсочницСй β€” срСдой для ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ прилоТСния-ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (ΠΊΠ°ΠΊ это ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ CRL). Π’ storybook ΠΌΡ‹ пишСм stories β€” ts-Ρ„Π°ΠΉΠ»Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ наши ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ…ΠΎΠ΄Ρ‹ΠΌΠΈ props Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ стало понятнСС). Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΈΠ· этих stories собираСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-Π²ΠΈΡ‚Ρ€ΠΈΠ½Π°.

Запустим скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ storybook:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Ρ€ΡƒΠΆΠΈΠΌ Π΅Π³ΠΎ с TS. Для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π° Π·Π°ΠΎΠ΄Π½ΠΎ поставим ΠΏΠ°Ρ€Ρƒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Π°Π΄Π΄ΠΎΠ½ΠΎΠ²:

НапишСм Π½Π°ΡˆΡƒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ story Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ExampleComponent

ΠœΡ‹ использовали Π°Π΄Π΄ΠΎΠ½Ρ‹:

Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² npm ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ свою Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹ΠΉ npm-ΠΏΠ°ΠΊΠ΅Ρ‚. А ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΅Ρ‘ прямо ΠΈΠ· git-рСпозитория ΠΊΠ°ΠΊ ΠΈΠ· master, Ρ‚Π°ΠΊ ΠΈ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ. НапримСр, для ΠΌΠΎΠ΅ΠΉ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:

Π’Π°ΠΊΠΆΠ΅, благодаря TS, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² IDE.

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

Π’ сСрСдинС 2019 Π³ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ довольно быстро Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ свою Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π° React ΠΈ TypeScript, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ инструмСнтами Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π­Ρ‚ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, Ρ‚Π°ΠΊ ΠΈ Π² Ρ€ΡƒΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ являСтся ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ссли Π½ΡƒΠΆΠ½Ρ‹ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ большС контроля. Π“Π»Π°Π²Π½ΠΎΠ΅ Π·Π½Π°Ρ‚ΡŒ ΠΊΡƒΠ΄Π° ΠΊΠΎΠΏΠ°Ρ‚ΡŒ, Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, я надюсь, это стало нСсколько ΠΏΡ€ΠΎΡ‰Π΅.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΡƒΡŽΡΡ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ Ρ‚ΡƒΡ‚.

ΠšΡ€ΠΎΠΌΠ΅ всСго ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, я Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΡŽ Π½Π° истину Π² послСднСй инстанции ΠΈ, Π²ΠΎΠΎΠ±Ρ‰Π΅, занимаюсь Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ΠΎΠΌ ΠΏΠΎΡΡ‚ΠΎΠ»ΡŒΠΊΡƒ-ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ ΠΎΠΏΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ успСха Π² создании своСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄, Ссли Π²Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ Π² коммСнтариях своими Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°ΠΌΠΈ. Happy coding!

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

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

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