Статична типізація
These docs are old and won’t be updated. Go to react.dev for the new React docs.
Check out React TypeScript cheatsheet for how to use React with TypeScript.
Статичні типізатори, такі як Flow і TypeScript, розпізнають певні типи проблем навіть до запуску вашого коду. Вони також можуть покращити робочий процес розробника додаючи функції, такі як автозавершення. З цієї причини для великих кодових баз ми рекомендуємо використовувати Flow або TypeScript замість PropTypes
.
Flow
Flow — це статичний типізатор для вашого JavaScript-коду. Він розроблюється у Facebook і часто використовується разом з React. Він дозволяє вам анотувати змінні, функції та React-компоненти спеціальним синтаксисом типу і рано ловити помилки. Щоб вивчити його основи ви можете прочитати введення у Flow.
Щоб використовувати Flow вам необхідно:
- Додати Flow як залежність до вашого проекту.
- Забезпечити вилучення синтаксису Flow зі скомпільованого коду.
- Додати анотації типів та запустити Flow для їх перевірки.
Ми пояснимо ці кроки більш детально нижче.
Додавання Flow у проект
Спочатку в терміналі перейдіть у директорію вашого проекту. Вам потрібно буде запустити наступну команду:
Якщо ви користуєтесь Yarn, то запустіть:
yarn add --dev flow-bin
Якщо ви користуєтесь npm, то запустіть:
npm install --save-dev flow-bin
Ця команда встановить останню версію Flow у ваш проект.
Тепер додайте flow
у відділення "scripts"
вашого package.json
, щоб ви змогли використовувати його з терміналу:
{
// ...
"scripts": {
"flow": "flow", // ...
},
// ...
}
Нарешті виконайте одну з наступних команд:
Якщо ви користуєтесь Yarn, то запустіть:
yarn run flow init
Якщо ви користуєтесь npm, то запустіть:
npm run flow init
Ця команда створить конфігурацію Flow, яку вам потрібно буде закомітити.
Вилучення синтаксису Flow зі скомпільованого коду
Flow розширяє мову JavaScript спеціальним синтаксисом для анотацій типів. Проте браузери не знають про цей синтаксис, тому нам потрібно переконатися, що він не з’явиться у скомпільованому JavaScript-пакеті, який надсилається браузеру.
Як саме це зробити залежить від інструментів, якими ви компілюєте JavaScript.
Create React App
Якщо ваш проект був налаштований з використанням Create React App, то ми вас вітаємо! Flow-анотації вже вилучаються за замовчуванням, тому вам не потрібно більше нічого робити на цьому кроці.
Babel
Примітка:
Ці інструкції не для користувачів Create React App. Незважаючи на те, що Create React App використовує Babel в реалізації, він вже налаштований на розуміння Flow. Виконайте це крок лише коли ви не використовуєте Create React App.
Якщо ви налаштували Babel для вашого проекту вручну, то вам потрібно буде встановити спеціальний пресет для Flow.
Якщо ви користуєтесь Yarn, то запустіть:
yarn add --dev @babel/preset-flow
Якщо ви користуєтесь npm, то запустіть:
npm install --save-dev @babel/preset-flow
І потім додайте пресет flow
до вашої конфігурації Babel. Наприклад, якщо ви налаштовуєте Babel через файл .babelrc
, то він може виглядати так:
{
"presets": [
"@babel/preset-flow", "react"
]
}
Це дозволить вам використовувати синтаксис Flow у вашому коді.
Примітка:
Flow не потребує пресет
react
, але вони часто використовуються разом. Flow сам по собі розуміє синтаксис JSX.
Інші варіанти збірки
Якщо ви не використовуєте Create React App і Babel, то ви можете використати flow-remove-types для видалення анотацій типів.
Запуск Flow
Якщо ви слідували наведеним вище інструкціям, то ви повинні мати можливість вперше запустити Flow.
yarn flow
Якщо ви користуєтесь npm, то запустіть:
npm run flow
Ви маєте побачити подібне повідомлення:
No errors!
✨ Done in 0.17s.
Додавання анотацій типів Flow
За замовчуванням Flow перевіряє лише файли, що включають таку анотацію:
// @flow
Зазвичай вона розміщується на початку файлу. Спробуйте додати її до деяких файлів у вашому проекті і запустити yarn flow
чи npm run flow
, щоб побачити чи Flow вже знайшов якісь проблеми.
Також існує опція, що дозволяє примусити Flow перевіряти всі файли незалежно від наявності вищевказаної анотації. Якщо ви додаєте Flow в існуючий проект, то може виникнути багато конфліктів, але якщо ви починаєте з нуля, то це непогана можливість зробити це.
Тепер у вас все налаштовано! Ми рекомендуємо ознайомитись з наступними ресурсами, щоб дізнатися більше про Flow:
- Документація Flow: анотації типів
- Документація Flow: редактори
- Документація Flow: React
- Linting у Flow
TypeScript
TypeScript — це мова програмування розроблена Microsoft. Вона є типізованою надмножиною мови JavaScript, і включає власний компілятор. Статична типізація дозволяє мові TypeScript ловити помилки та дефекти під час збірки, набагато раніше ніж ваш додаток буде випущено. Ви можете дізнатися більше про використання TypeScript з React тут.
Для використання TypeScript вам потрібно:
- Додати TypeScript як залежність до вашого проекту
- Налаштувати опції TypeScript-компілятора
- Використовувати правильні розширення файлів
- Додати файли оголошень для бібліотек, якими ви користуєтесь
Давайте пройдемо по списку детальніше.
Використання TypeScript з Create React App
Create React App сам по собі підтримує TypeScript.
Щоб створити новий проект з підтримкою TypeScript запустіть:
npx create-react-app my-app --template typescript
Ви також зможете додати його до існуючого проекту Create React App як описано тут.
Примітка:
Якщо ви користуєтесь Create React App, то ви можете пропустити решту цієї сторінки. Вона описує налаштування вручну, що не відноситься до користувачів Create React App.
Додавання TypeScript в проект
Все починається з запуску однієї команди в вашому терміналі.
Якщо ви користуєтесь Yarn, то запустіть:
yarn add --dev typescript
Якщо ви користуєтесь npm, то запустіть:
npm install --save-dev typescript
Вітаємо! Ви встановили останню версію TypeScript у ваш проект. Встановлення TypeScript надає вам доступ до команди tsc
. Давайте додамо tsc
у відділення “scripts” вашого package.json
перед його налаштуванням:
{
// ...
"scripts": {
"build": "tsc", // ...
},
// ...
}
Налаштування компілятора TypeScript
Компілятор нам не допоможе поки ми не вкажемо що йому робити. В TypeScript ці правила задаються в спеціальному файлі під назвою tsconfig.json
. Щоб згенерувати цей файл запустіть наступне:
Якщо ви користуєтесь Yarn, то запустіть:
yarn run tsc --init
Якщо ви користуєтесь npm, то запустіть:
npx tsc --init
Поглянувши на щойно створений файл tsconfig.json
ви побачите, що існує багато опцій для налаштyвання компілятора. Детальний опис всіх опцій доступний за цим посиланням.
Ми розглянемо rootDir
та outDir
із багатьох опцій. По суті компілятор братиме файли TypeScript та генеруватиме файли JavaScript. Проте нам важливо не сплутати вихідні файли та згенерований результат.
Ми вирішимо це у два етапи:
- Спочатку організуємо структуру нашого проекту таким чином: ми розмістимо весь вихідний код в директорії
src
.
├── package.json
├── src
│ └── index.ts
└── tsconfig.json
- Потім вкажимо компілятору де знаходиться наш вихідний код і куди повинен виводитись результат.
// tsconfig.json
{
"compilerOptions": {
// ...
"rootDir": "src", "outDir": "build" // ...
},
}
Чудово! Тепер при запуску скрипту збірки компілятор виведе згенеровані файли JavaScript в папку build
. TypeScript React Starter надає tsconfig.json
з гарним набором правил для початку.
Зазвичай згенерований JavaScript-код не варто зберігати в системі керування версіями, тому не забудьте додати папку build
до вашого .gitignore
.
Розширення файлів
При роботі з React ви, скоріше за все, створювали свої компоненти у файлах .js
. У TypeScript ми маємо два різних файлових розширення:
.ts
— це розширення файлів за замовчуванням, а .tsx
— це спеціальне розширення для файлів, що містять JSX
.
Запуск TypeScript
Якщо ви слідували інструкціям вище, то ви повинні мати можливість вперше запустити TypeScript.
yarn build
Якщо ви користуєтесь npm, то запустіть:
npm run build
Якщо ви не побачили ніяких повідомлень, то це означає, що компіляція завершилася успішно.
Оголошення типів
Компілятор покладається на файли оголошень щоб показувати помилки та підказки з інших пакетів. Файл оголошень надає всю інформацію про типи в бібліотеці. Це дозволяє використовувати в нашому проекті бібліотеки JavaScript як ті, що доступні в npm.
Існує два основних шляхи отримати оголошення для бібліотеки:
Укомплектовані – це коли бібліотека включає свій власний файл оголошень. Це чудово для нас, оскільки все що нам потрібно зробити – це встановити бібліотеку і ми можемо одразу її використовувати. Щоб перевірити чи бібліотека укомплектована інформацією про типи погляньте чи в проекті є файл index.d.ts
. Деякі бібліотеки вказують його в своїх package.json
в полі typings
або types
.
DefinitelyTyped – це величезний репозиторій оголошень для бібліотек, що не включають власні файли оголошень. Ці оголошення створюються через краудсорсинг та контролюються Microsoft та учасниками відкритого програмного забезпечення. Наприклад, React не включає власний файл оголошень. Замість цього ми можем його отримати з DefinitelyTyped. Для цього введіть таку команду в вашому терміналі.
# yarn
yarn add --dev @types/react
# npm
npm i --save-dev @types/react
Локальні оголошення
Інколи пакет, який би ви хотіли використовувати не включає оголошень і їх також немає в DefinitelyTyped. В цьому випадку ми можемо завести локальний файл оголошень. Для цього створіть файл declarations.d.ts
в корені вашої директорії з вихідним кодом. Просте оголошення може виглядати наступним чином:
declare module 'querystring' {
export function stringify(val: object): string
export function parse(val: string): object
}
Тепер ви готові до кодингу! Ми рекомендуємо ознайомитись з наступними ресурсами щоб дізнатися більше про TypeScript:
- Документація TypeScript: базові типи
- Документація TypeScript: міграція з JavaScript
- Документація TypeScript: React та Webpack
ReScript
Reason – це не нова мова, а новий синтаксис та інструментарій, працюючі на перевіреній часом мові OCaml. Reason надає OCaml знайомий синтаксис пристосований для програмістів JavaScript та використовує знайомий всім робочий процес NPM/Yarn.
Reason розробляється компанією Facebook і використовується в деяких її продуктах, таких як Messenger. Він поки є дещо експериментальною технологією, але для нього існують спеціалізовані прив’язки з React, що підтримуються Facebook та активною спільнотою.
Kotlin
Kotlin – це статично типізована мова розроблена JetBrains. Її цільові платформи включають JVM, Android, LLVM, та JavaScript.
JetBrains розробляє та підтримує декілька інструментів спеціально для спільноти користувачів React: React-прив’язки а також Create React Kotlin App. Останній допомагає почати будувати React-додатки з Kotlin без потреби у налаштуванні збірки.
Інші мови
Зверніть увагу, що існують інші статично типізовані мови які компілюються у JavaScript і таким чином сумісні з React. Наприклад, F#/Fable з elmish-react. Ознайомтесь з їх відповідними сайтами щоб дізнатися більше інформації, також не вагайтеся додавати до цієї сторінки інші статично-типізовані мови, що працюють з React!