{"componentChunkName":"component---src-templates-docs-js","path":"/docs/static-type-checking.html","result":{"data":{"markdownRemark":{"html":"<p>Статичні типізатори, такі як <a href=\"https://flow.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Flow</a> і <a href=\"https://www.typescriptlang.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TypeScript</a>, розпізнають певні типи проблем навіть до запуску вашого коду. Вони також можуть покращити робочий процес розробника додаючи функції, такі як автозавершення. З цієї причини для великих кодових баз ми рекомендуємо використовувати Flow або TypeScript замість <code class=\"gatsby-code-text\">PropTypes</code>.</p>\n<h2 id=\"flow\"><a href=\"#flow\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Flow </h2>\n<p><a href=\"https://flow.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Flow</a> — це статичний типізатор для вашого JavaScript-коду. Він розроблюється у Facebook і часто використовується разом з React. Він дозволяє вам анотувати змінні, функції та React-компоненти спеціальним синтаксисом типу і рано ловити помилки. Щоб вивчити його основи ви можете прочитати <a href=\"https://flow.org/en/docs/getting-started/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">введення у Flow</a>.</p>\n<p>Щоб використовувати Flow вам необхідно:</p>\n<ul>\n<li>Додати Flow як залежність до вашого проекту.</li>\n<li>Забезпечити вилучення синтаксису Flow зі скомпільованого коду.</li>\n<li>Додати анотації типів та запустити Flow для їх перевірки.</li>\n</ul>\n<p>Ми пояснимо ці кроки більш детально нижче.</p>\n<h3 id=\"adding-flow-to-a-project\"><a href=\"#adding-flow-to-a-project\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Додавання Flow у проект </h3>\n<p>Спочатку в терміналі перейдіть у директорію вашого проекту. Вам потрібно буде запустити наступну команду:</p>\n<p>Якщо ви користуєтесь <a href=\"https://yarnpkg.com/uk/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Yarn</a>, то запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> <span class=\"token function\">add</span> --dev flow-bin</code></pre></div>\n<p>Якщо ви користуєтесь <a href=\"https://www.npmjs.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">npm</a>, то запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> --save-dev flow-bin</code></pre></div>\n<p>Ця команда встановить останню версію Flow у ваш проект.</p>\n<p>Тепер додайте <code class=\"gatsby-code-text\">flow</code> у відділення <code class=\"gatsby-code-text\">&quot;scripts&quot;</code> вашого <code class=\"gatsby-code-text\">package.json</code>, щоб ви змогли використовувати його з терміналу:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ...</span>\n  <span class=\"token string\">\"scripts\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token string\">\"flow\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"flow\"</span><span class=\"token punctuation\">,</span></span>    <span class=\"token comment\">// ...</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Нарешті виконайте одну з наступних команд:</p>\n<p>Якщо ви користуєтесь <a href=\"https://yarnpkg.com/uk/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Yarn</a>, то запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> run flow init</code></pre></div>\n<p>Якщо ви користуєтесь <a href=\"https://www.npmjs.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">npm</a>, то запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> run flow init</code></pre></div>\n<p>Ця команда створить конфігурацію Flow, яку вам потрібно буде закомітити.</p>\n<h3 id=\"stripping-flow-syntax-from-the-compiled-code\"><a href=\"#stripping-flow-syntax-from-the-compiled-code\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Вилучення синтаксису Flow зі скомпільованого коду </h3>\n<p>Flow розширяє мову JavaScript спеціальним синтаксисом для анотацій типів. Проте браузери не знають про цей синтаксис, тому нам потрібно переконатися, що він не з’явиться у скомпільованому JavaScript-пакеті, який надсилається браузеру.</p>\n<p>Як саме це зробити залежить від інструментів, якими ви компілюєте JavaScript.</p>\n<h4 id=\"create-react-app\"><a href=\"#create-react-app\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Create React App </h4>\n<p>Якщо ваш проект був налаштований з використанням <a href=\"https://github.com/facebookincubator/create-react-app\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Create React App</a>, то ми вас вітаємо! Flow-анотації вже вилучаються за замовчуванням, тому вам не потрібно більше нічого робити на цьому кроці.</p>\n<h4 id=\"babel\"><a href=\"#babel\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Babel </h4>\n<blockquote>\n<p>Примітка:</p>\n<p>Ці інструкції <em>не</em> для користувачів Create React App. Незважаючи на те, що Create React App використовує Babel в реалізації, він вже налаштований на розуміння Flow. Виконайте це крок лише коли ви <em>не</em> використовуєте Create React App.</p>\n</blockquote>\n<p>Якщо ви налаштували Babel для вашого проекту вручну, то вам потрібно буде встановити спеціальний пресет для Flow.</p>\n<p>Якщо ви користуєтесь Yarn, то запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> <span class=\"token function\">add</span> --dev @babel/preset-flow</code></pre></div>\n<p>Якщо ви користуєтесь npm, то запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> --save-dev @babel/preset-flow</code></pre></div>\n<p>І потім додайте пресет <code class=\"gatsby-code-text\">flow</code> до вашої <a href=\"https://babeljs.io/docs/usage/babelrc/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">конфігурації Babel</a>. Наприклад, якщо ви налаштовуєте Babel через файл <code class=\"gatsby-code-text\">.babelrc</code>, то він може виглядати так:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token punctuation\">{</span>\n  <span class=\"token string\">\"presets\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token string\">\"@babel/preset-flow\"</span><span class=\"token punctuation\">,</span></span>    <span class=\"token string\">\"react\"</span>\n  <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Це дозволить вам використовувати синтаксис Flow у вашому коді.</p>\n<blockquote>\n<p>Примітка:</p>\n<p>Flow не потребує пресет <code class=\"gatsby-code-text\">react</code>, але вони часто використовуються разом. Flow сам по собі розуміє синтаксис JSX.</p>\n</blockquote>\n<h4 id=\"other-build-setups\"><a href=\"#other-build-setups\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Інші варіанти збірки </h4>\n<p>Якщо ви не використовуєте Create React App і Babel, то ви можете використати <a href=\"https://github.com/flowtype/flow-remove-types\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">flow-remove-types</a> для видалення анотацій типів.</p>\n<h3 id=\"running-flow\"><a href=\"#running-flow\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Запуск Flow </h3>\n<p>Якщо ви слідували наведеним вище інструкціям, то ви повинні мати можливість вперше запустити Flow.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> flow</code></pre></div>\n<p>Якщо ви користуєтесь npm, то запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> run flow</code></pre></div>\n<p>Ви маєте побачити подібне повідомлення:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"gatsby-code-text\"><code class=\"gatsby-code-text\">No errors!\n✨  Done in 0.17s.</code></pre></div>\n<h3 id=\"adding-flow-type-annotations\"><a href=\"#adding-flow-type-annotations\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Додавання анотацій типів Flow </h3>\n<p>За замовчуванням Flow перевіряє лише файли, що включають таку анотацію:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// @flow</span></code></pre></div>\n<p>Зазвичай вона розміщується на початку файлу. Спробуйте додати її до деяких файлів у вашому проекті і запустити <code class=\"gatsby-code-text\">yarn flow</code> чи <code class=\"gatsby-code-text\">npm run flow</code>, щоб побачити чи Flow вже знайшов якісь проблеми.</p>\n<p>Також існує <a href=\"https://flow.org/en/docs/config/options/#toc-all-boolean\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">опція</a>, що дозволяє примусити Flow перевіряти <em>всі</em> файли незалежно від наявності вищевказаної анотації. Якщо ви додаєте Flow в існуючий проект, то може виникнути багато конфліктів, але якщо ви починаєте з нуля, то це непогана можливість зробити це.</p>\n<p>Тепер у вас все налаштовано! Ми рекомендуємо ознайомитись з наступними ресурсами, щоб дізнатися більше про Flow:</p>\n<ul>\n<li><a href=\"https://flow.org/en/docs/types/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Документація Flow: анотації типів</a></li>\n<li><a href=\"https://flow.org/en/docs/editors/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Документація Flow: редактори</a></li>\n<li><a href=\"https://flow.org/en/docs/react/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Документація Flow: React</a></li>\n<li><a href=\"https://medium.com/flow-type/linting-in-flow-7709d7a7e969\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Linting у Flow</a></li>\n</ul>\n<h2 id=\"typescript\"><a href=\"#typescript\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>TypeScript </h2>\n<p><a href=\"https://www.typescriptlang.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TypeScript</a> — це мова програмування розроблена Microsoft. Вона є типізованою надмножиною мови JavaScript, і включає власний компілятор. Статична типізація дозволяє мові TypeScript ловити помилки та дефекти під час збірки, набагато раніше ніж ваш додаток буде випущено. Ви можете дізнатися більше про використання TypeScript з React <a href=\"https://github.com/Microsoft/TypeScript-React-Starter#typescript-react-starter\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">тут</a>.</p>\n<p>Для використання TypeScript вам потрібно:</p>\n<ul>\n<li>Додати TypeScript як залежність до вашого проекту</li>\n<li>Налаштувати опції TypeScript-компілятора</li>\n<li>Використовувати правильні розширення файлів</li>\n<li>Додати файли оголошень для бібліотек, якими ви користуєтесь</li>\n</ul>\n<p>Давайте пройдемо по списку детальніше.</p>\n<h3 id=\"using-typescript-with-create-react-app\"><a href=\"#using-typescript-with-create-react-app\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Використання TypeScript з Create React App </h3>\n<p>Create React App сам по собі підтримує TypeScript.</p>\n<p>Щоб створити <strong>новий проект</strong> з підтримкою TypeScript запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\">npx create-react-app my-app --template typescript</code></pre></div>\n<p>Ви також зможете додати його до <strong>існуючого проекту Create React App</strong> <a href=\"https://facebook.github.io/create-react-app/docs/adding-typescript\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">як описано тут</a>.</p>\n<blockquote>\n<p>Примітка:</p>\n<p>Якщо ви користуєтесь Create React App, то ви можете <strong>пропустити решту цієї сторінки</strong>. Вона описує налаштування вручну, що не відноситься до користувачів Create React App.</p>\n</blockquote>\n<h3 id=\"adding-typescript-to-a-project\"><a href=\"#adding-typescript-to-a-project\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Додавання TypeScript в проект </h3>\n<p>Все починається з запуску однієї команди в вашому терміналі.</p>\n<p>Якщо ви користуєтесь <a href=\"https://yarnpkg.com/uk/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Yarn</a>, то запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> <span class=\"token function\">add</span> --dev typescript</code></pre></div>\n<p>Якщо ви користуєтесь <a href=\"https://www.npmjs.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">npm</a>, то запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> --save-dev typescript</code></pre></div>\n<p>Вітаємо! Ви встановили останню версію TypeScript у ваш проект. Встановлення TypeScript надає вам доступ до команди <code class=\"gatsby-code-text\">tsc</code>. Давайте додамо <code class=\"gatsby-code-text\">tsc</code> у відділення “scripts” вашого <code class=\"gatsby-code-text\">package.json</code> перед його налаштуванням:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ...</span>\n  <span class=\"token string\">\"scripts\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token string\">\"build\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"tsc\"</span><span class=\"token punctuation\">,</span></span>    <span class=\"token comment\">// ...</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"configuring-the-typescript-compiler\"><a href=\"#configuring-the-typescript-compiler\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Налаштування компілятора TypeScript </h3>\n<p>Компілятор нам не допоможе поки ми не вкажемо що йому робити. В TypeScript ці правила задаються в спеціальному файлі під назвою <code class=\"gatsby-code-text\">tsconfig.json</code>. Щоб згенерувати цей файл запустіть наступне:</p>\n<p>Якщо ви користуєтесь <a href=\"https://yarnpkg.com/uk/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Yarn</a>, то запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> run tsc --init</code></pre></div>\n<p>Якщо ви користуєтесь <a href=\"https://www.npmjs.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">npm</a>, то запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\">npx tsc --init</code></pre></div>\n<p>Поглянувши на щойно створений файл <code class=\"gatsby-code-text\">tsconfig.json</code> ви побачите, що існує багато опцій для налаштyвання компілятора. Детальний опис всіх опцій доступний за <a href=\"https://www.typescriptlang.org/docs/handbook/tsconfig-json.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">цим посиланням</a>.</p>\n<p>Ми розглянемо <code class=\"gatsby-code-text\">rootDir</code> та <code class=\"gatsby-code-text\">outDir</code> із багатьох опцій. По суті компілятор братиме файли TypeScript та генеруватиме файли JavaScript. Проте нам важливо не сплутати вихідні файли та згенерований результат.</p>\n<p>Ми вирішимо це у два етапи:</p>\n<ul>\n<li>Спочатку організуємо структуру нашого проекту таким чином: ми розмістимо весь вихідний код в директорії <code class=\"gatsby-code-text\">src</code>.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"gatsby-code-text\"><code class=\"gatsby-code-text\">├── package.json\n├── src\n│   └── index.ts\n└── tsconfig.json</code></pre></div>\n<ul>\n<li>Потім вкажимо компілятору де знаходиться наш вихідний код і куди повинен виводитись результат.</li>\n</ul>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// tsconfig.json</span>\n\n<span class=\"token punctuation\">{</span>\n  <span class=\"token string\">\"compilerOptions\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// ...</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token string\">\"rootDir\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"src\"</span><span class=\"token punctuation\">,</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token string\">\"outDir\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"build\"</span></span>    <span class=\"token comment\">// ...</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Чудово! Тепер при запуску скрипту збірки компілятор виведе згенеровані файли JavaScript в папку <code class=\"gatsby-code-text\">build</code>. <a href=\"https://github.com/Microsoft/TypeScript-React-Starter/blob/master/tsconfig.json\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TypeScript React Starter</a> надає <code class=\"gatsby-code-text\">tsconfig.json</code> з гарним набором правил для початку.</p>\n<p>Зазвичай згенерований JavaScript-код не варто зберігати в системі керування версіями, тому не забудьте додати папку <code class=\"gatsby-code-text\">build</code> до вашого <code class=\"gatsby-code-text\">.gitignore</code>.</p>\n<h3 id=\"file-extensions\"><a href=\"#file-extensions\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Розширення файлів </h3>\n<p>При роботі з React ви, скоріше за все, створювали свої компоненти у файлах <code class=\"gatsby-code-text\">.js</code>. У TypeScript ми маємо два різних файлових розширення:</p>\n<p><code class=\"gatsby-code-text\">.ts</code>— це розширення файлів за замовчуванням, а <code class=\"gatsby-code-text\">.tsx</code>— це спеціальне розширення для файлів, що містять <code class=\"gatsby-code-text\">JSX</code>.</p>\n<h3 id=\"running-typescript\"><a href=\"#running-typescript\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Запуск TypeScript </h3>\n<p>Якщо ви слідували інструкціям вище, то ви повинні мати можливість вперше запустити TypeScript.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> build</code></pre></div>\n<p>Якщо ви користуєтесь npm, то запустіть:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> run build</code></pre></div>\n<p>Якщо ви не побачили ніяких повідомлень, то це означає, що компіляція завершилася успішно.</p>\n<h3 id=\"type-definitions\"><a href=\"#type-definitions\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Оголошення типів </h3>\n<p>Компілятор покладається на файли оголошень щоб показувати помилки та підказки з інших пакетів. Файл оголошень надає всю інформацію про типи в бібліотеці. Це дозволяє використовувати в нашому проекті бібліотеки JavaScript як ті, що доступні в npm. </p>\n<p>Існує два основних шляхи отримати оголошення для бібліотеки:</p>\n<p><strong>Укомплектовані</strong> – це коли бібліотека включає свій власний файл оголошень. Це чудово для нас, оскільки все що нам потрібно зробити – це встановити бібліотеку і ми можемо одразу її використовувати. Щоб перевірити чи бібліотека укомплектована інформацією про типи погляньте чи в проекті є файл <code class=\"gatsby-code-text\">index.d.ts</code>. Деякі бібліотеки вказують його в своїх <code class=\"gatsby-code-text\">package.json</code> в полі <code class=\"gatsby-code-text\">typings</code> або <code class=\"gatsby-code-text\">types</code>.</p>\n<p><strong><a href=\"https://github.com/DefinitelyTyped/DefinitelyTyped\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">DefinitelyTyped</a></strong> – це величезний репозиторій оголошень для бібліотек, що не включають власні файли оголошень. Ці оголошення створюються через краудсорсинг та контролюються Microsoft та учасниками відкритого програмного забезпечення. Наприклад, React не включає власний файл оголошень. Замість цього ми можем його отримати з DefinitelyTyped. Для цього введіть таку команду в вашому терміналі.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token comment\"># yarn</span>\n<span class=\"token function\">yarn</span> <span class=\"token function\">add</span> --dev @types/react\n\n<span class=\"token comment\"># npm</span>\n<span class=\"token function\">npm</span> i --save-dev @types/react</code></pre></div>\n<p><strong>Локальні оголошення</strong>\nІнколи пакет, який би ви хотіли використовувати не включає оголошень і їх також немає в DefinitelyTyped. В цьому випадку ми можемо завести локальний файл оголошень. Для цього створіть файл <code class=\"gatsby-code-text\">declarations.d.ts</code> в корені вашої директорії з вихідним кодом. Просте оголошення може виглядати наступним чином:</p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"gatsby-code-typescript\"><code class=\"gatsby-code-typescript\"><span class=\"token keyword\">declare</span> <span class=\"token keyword\">module</span> <span class=\"token string\">'querystring'</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span>val<span class=\"token operator\">:</span> object<span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">string</span>\n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>val<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> object\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Тепер ви готові до кодингу! Ми рекомендуємо ознайомитись з наступними ресурсами щоб дізнатися більше про TypeScript:</p>\n<ul>\n<li><a href=\"https://www.typescriptlang.org/docs/handbook/basic-types.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Документація TypeScript: базові типи</a></li>\n<li><a href=\"https://www.typescriptlang.org/docs/handbook/migrating-from-javascript.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Документація TypeScript: міграція з JavaScript</a></li>\n<li><a href=\"https://www.typescriptlang.org/docs/handbook/react-&#x26;-webpack.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Документація TypeScript: React та Webpack</a></li>\n</ul>\n<h2 id=\"reason\"><a href=\"#reason\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Reason </h2>\n<p><a href=\"https://reasonml.github.io/uk/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Reason</a> – це не нова мова, а новий синтаксис та інструментарій, працюючі на перевіреній часом мові <a href=\"https://ocaml.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">OCaml</a>. Reason надає OCaml знайомий синтаксис пристосований для програмістів JavaScript та використовує знайомий всім робочий процес NPM/Yarn.</p>\n<p>Reason розробляється компанією Facebook і використовується в деяких її продуктах, таких як Messenger. Він поки є дещо експериментальною технологією, але для нього існують <a href=\"https://reasonml.github.io/reason-react/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">спеціалізовані прив’язки з React</a>, що підтримуються Facebook та <a href=\"https://reasonml.github.io/docs/uk/community.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">активною спільнотою</a>.</p>\n<h2 id=\"kotlin\"><a href=\"#kotlin\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Kotlin </h2>\n<p><a href=\"https://kotlinlang.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Kotlin</a> – це статично типізована мова розроблена JetBrains. Її цільові платформи включають JVM, Android, LLVM, та <a href=\"https://kotlinlang.org/docs/reference/js-overview.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">JavaScript</a>. </p>\n<p>JetBrains розробляє та підтримує декілька інструментів спеціально для спільноти користувачів React: <a href=\"https://github.com/JetBrains/kotlin-wrappers\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">React-прив’язки</a> а також <a href=\"https://github.com/JetBrains/create-react-kotlin-app\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Create React Kotlin App</a>. Останній допомагає почати будувати React-додатки з Kotlin без потреби у налаштуванні збірки.</p>\n<h2 id=\"other-languages\"><a href=\"#other-languages\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Інші мови </h2>\n<p>Зверніть увагу, що існують інші статично типізовані мови які компілюються у JavaScript і таким чином сумісні з React. Наприклад, <a href=\"https://fable.io/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">F#/Fable</a> з <a href=\"https://elmish.github.io/react\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">elmish-react</a>. Ознайомтесь з їх відповідними сайтами щоб дізнатися більше інформації, також не вагайтеся додавати до цієї сторінки інші статично-типізовані мови, що працюють з React!</p>","frontmatter":{"title":"Статична типізація","next":null,"prev":null},"fields":{"path":"content/docs/static-type-checking.md","slug":"docs/static-type-checking.html"}}},"pageContext":{"slug":"docs/static-type-checking.html"}},"staticQueryHashes":[]}