Skip to content

Commit

Permalink
Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
bielarusajed committed Oct 5, 2023
1 parent d29cf95 commit 9d9aa56
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions src/content/learn/typescript.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ re: https://github.com/reactjs/react.dev/issues/5960

<Intro>

TypeScript — папулярны спосаб дадаць тыпізацыі ў ваш JavaScript код. TypeScript [падтрымлівае JSX](/learn/writing-markup-with-jsx) з каробкі, вы можаце дадаць паўнавартасную падтрымку React для вэб, дадаўшы да праекта [`@types/react`](https://www.npmjs.com/package/@types/react) і [`@types/react-dom`](https://www.npmjs.com/package/@types/react-dom).
TypeScript — папулярны спосаб дадаць тыпізацыю ў ваш JavaScript код. TypeScript [падтрымлівае JSX](/learn/writing-markup-with-jsx) з каробкі, вы можаце дадаць паўнавартасную падтрымку React для вэб, дадаўшы да праекта [`@types/react`](https://www.npmjs.com/package/@types/react) і [`@types/react-dom`](https://www.npmjs.com/package/@types/react-dom).

</Intro>

Expand All @@ -18,7 +18,7 @@ TypeScript — папулярны спосаб дадаць тыпізацыі

</YouWillLearn>

## Installation {/*installation*/}
## Усталёўка {/*installation*/}

Усе [React фрэймворкі, гатовыя для выкарыстання ў працоўным асяроддзі](/learn/start-a-new-react-project#production-grade-react-frameworks) прапануюць падтрымку TypeScript. Для кожнага фрэймворка трымайцеся ягоных уласных інструкцый:

Expand All @@ -37,21 +37,21 @@ npm install @types/react @types/react-dom

Ваш `tsconfig.json` мае змяшчаць наступныя налады:

1. `dom` мае быць уключаны ў [`lib`](https://www.typescriptlang.org/tsconfig/#lib) (Заўвага: калі значэнне для `lib` не зададзенае, `dom` уключанае па-змаўчанні).
1. `dom` мае быць уключанае ў [`lib`](https://www.typescriptlang.org/tsconfig/#lib) (Заўвага: калі значэнне для `lib` не зададзенае, `dom` прадвызначана уключанае).
1. [`jsx`](https://www.typescriptlang.org/tsconfig/#jsx) мае мець любое валіднае значэнне. `preserve` мае падыходзіць для большасці выпадкаў.
Калі вы публікуеце бібліятэку, звярніцеся да [дакументацыі па полю `jsx`](https://www.typescriptlang.org/tsconfig/#jsx) каб падабраць правільнае значэнне.

## TypeScript з кампанентамі React {/*typescript-with-react-components*/}

<Note>

Усе файлы, што змяшчаюць JSX, маюць мець пашырэнне `.tsx`. Гэта спецыфічнае для TypeScript пашырэнне, які дае TypeScript ведаць, што файл змяшчае JSX.
Усе файлы, што змяшчаюць JSX, маюць мець пашырэнне `.tsx`. Гэта спецыфічнае для TypeScript пашырэнне, якое кажа TypeScript, што файл змяшчае JSX.

</Note>

Напісанне TypeScript з React вельмі падобнае да напісання JavaScript з React. Асноўнае адрозненне ў тым, што падчас працы з кампанентамі вы зможаце ўказаць тыпы пропсаў. Гэтыя тыпы могуць быць скарыстаныя для праверкі правільнасці і прадастаўлення ўнутранай дакументацыі для рэдактараў кода.

Узяўшы [кампанент `MyButton`](/learn#components) са старонкі «[Хуткі старт](/learn)», мы можам дадаць апісанне тыпа для пропса `title` кнопкі:
Узяўшы [кампанент `MyButton`](/learn#components) са старонкі «[Хуткі старт](/learn)», мы можам дадаць апісанне тыпу для пропса `title` кнопкі:

<Sandpack>

Expand Down Expand Up @@ -119,12 +119,12 @@ export default App = AppTSX;

</Sandpack>

Тып, якім вы апісваеце пропсы кампанента, можа быць на столькі простым ці складаным, на колькі вам тое патрэбна, але гэта заўсёды мае быць апісанне тыпа аб’екта праз `type` ці `interface`. Вы можаце даведацца больш аб тым, як апісваць аб’екты ў TypeScript на старонцы «[Object Types](https://www.typescriptlang.org/docs/handbook/2/objects.html)». Таксама вас могуць зацікавіць [аб’яднаныя тыпы](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types) для апісання пропсаў, якія можа адпавядаць аднаму з некалькіх тыпаў, ці інструкцыі як [ствараць тыпы на аснове іншых тыпаў](https://www.typescriptlang.org/docs/handbook/2/types-from-types.html) для больш складаных выпадкаў.
Тып, якім вы апісваеце пропсы кампанента, можа быць на столькі простым ці складаным, на колькі вам тое патрэбна, але гэта заўсёды мае быць апісанне тыпу аб’екта праз `type` ці `interface`. Вы можаце даведацца больш аб тым, як апісваць аб’екты ў TypeScript на старонцы «[Тыпы аб’ектаў](https://www.typescriptlang.org/docs/handbook/2/objects.html)». Таксама вас могуць зацікавіць [аб’яднаныя тыпы](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types) для апісання пропсаў, якія могуць адпавядаць аднаму з некалькіх тыпаў, ці інструкцыі як [ствараць тыпы на аснове іншых тыпаў](https://www.typescriptlang.org/docs/handbook/2/types-from-types.html) для больш складаных выпадкаў.


## Прыклады хукаў {/*example-hooks*/}

Апісанні тыпаў у `@types/react` уключае таксама і тыпізацыю ўбудаваных хукаў, таму вы можаце выкарыстоўваць іх у сваіх кампанентах без дадатковай налады. Яны пабудаваныя такім чынам, каб улічваць код, ужо напісаны ў кампаненце, такім чынам вы атрымаеце [аўтаматычна вызначаныя тыпы](https://www.typescriptlang.org/docs/handbook/type-inference.html) і ў большасці выпадкаў вам не давядзецца разбірацца з дробнай самастойнай тыпізацыяй.
Апісанні тыпаў у `@types/react` уключае таксама і тыпізацыю ўбудаваных хукаў, таму вы можаце выкарыстоўваць іх у сваіх кампанентах без дадатковай налады. Яны пабудаваныя такім чынам, каб улічваць код, ужо напісаны ў кампаненце, такім чынам вы атрымаеце [аўтаматычна вызначаныя тыпы](https://www.typescriptlang.org/docs/handbook/type-inference.html) і ў большасці выпадкаў вам не давядзецца разбірацца з дробнай тыпізацыяй самастойна.

Але далей мы разгледзім некалькі прыкладаў, як тыпізаваць хукі.

Expand All @@ -137,7 +137,7 @@ export default App = AppTSX;
const [enabled, setEnabled] = useState(false);
```

Для `enabled` будзе вызначаны тып `boolean`, а `setEnabled` будзе прымаць ці `boolean`, ці функцыю, якая вяртае `boolean`. Калі вы хочаце відавочна перадаць тып для вашага стану, вы можаце задаць яго пры выкліку `useState`:
Для `enabled` будзе вызначаны тып `boolean`, а `setEnabled` будзе прымаць або `boolean`, або функцыю, якая вяртае `boolean`. Калі вы хочаце відавочна перадаць тып для вашага стану, вы можаце задаць яго пры выкліку `useState`:

```ts
// Тып відавочна зададзены як boolean
Expand Down Expand Up @@ -223,12 +223,12 @@ export default App = AppTSX;

Мы выкарыстоўваем TypeScript у некаторых ключавых момантах:

- `interface State` апісвае стан рэд’юсера.
- `type CounterAction` апісвае розныя дзеянні, якія могуць быць адпраўленыя рэд’юсеру.
- `interface State` апісвае стан рэд’юсара.
- `type CounterAction` апісвае розныя дзеянні, якія могуць быць адпраўленыя рэд’юсару.
- `const initialState: State` задае тып першапачатковага стану, а таксама тып, які будзе выкарыстоўвацца ў `useReducer`.
- `stateReducer(state: State, action: CounterAction): State` задае тып для функцыі рэд’юсера і значэння, якое будзе з яе вяртацца.
- `stateReducer(state: State, action: CounterAction): State` задае тып для функцыі рэд’юсара і значэння, якое будзе з яе вяртацца.

Іншым шляхам відавочна задаць тып стану `initialState` будзе перадаць яго непасрэдна `useReducer`:
Больш відавочным спосабам задаць тып стану `initialState` будзе перадаць яго непасрэдна `useReducer`:

```ts
import { stateReducer, State } from './your-reducer-implementation';
Expand Down Expand Up @@ -291,7 +291,7 @@ export default App = AppTSX;
```js {5, 16-20}
import { createContext, useContext, useState, useMemo } from 'react';

// Гэта прочты прыклад, але вы можаце прыдумаць болей складаны аб’ект
// Гэта просты прыклад, але вы можаце прыдумаць больш складаны аб’ект
type ComplexObject = {
kind: string
};
Expand Down Expand Up @@ -321,7 +321,7 @@ function MyComponent() {

return (
<div>
<p>Цяперашні аб’ект: {object.kind}</p>
<p>Бягучы аб’ект: {object.kind}</p>
</div>
)
}
Expand Down Expand Up @@ -350,7 +350,7 @@ const handleClick = useCallback(() => {

Пры працы з TypeScript у строгім рэжыме, `useCallback` патрабуе дадатковай тыпізацыі параметраў функцыі. Гэта таму што тып функцыі вызначаны па тыпе вяртаемага значэння і не можа быць цалкам зразумелым.

У залежнасці ад вашых пераваг, вы можаце выкарыстоўваць функцыі `*EventHandler` з тыпаў React для забеспячэння тыпізацыі апрацоўшчыкаў падзей прама падчас аб’яўлення:
У залежнасці ад вашых пераваг у стылі кода, вы можаце выкарыстоўваць функцыі `*EventHandler` з тыпаў React для забеспячэння тыпізацыі апрацоўшчыкаў падзей прама падчас аб’яўлення:

```ts
import { useState, useCallback } from 'react';
Expand Down Expand Up @@ -407,7 +407,7 @@ export default App = AppTSX;

</Sandpack>

React таксама прадастаўляе шмат тыпаў падзей. Поўны іх спіс можна знайсці [тут](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/b580df54c0819ec9df62b0835a315dd48b8594a9/types/react/index.d.ts#L1247C1-L1373), ён змяшчае [найбольш выкарыстоўваемых падзеях DOM](https://developer.mozilla.org/en-US/docs/Web/Events).
React таксама прадастаўляе шмат тыпаў падзей. Поўны іх спіс можна знайсці [тут](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/b580df54c0819ec9df62b0835a315dd48b8594a9/types/react/index.d.ts#L1247C1-L1373), ён змяшчае [самыя папулярныя падзеі DOM](https://developer.mozilla.org/en-US/docs/Web/Events).

Калі вызначаецеся, які тып вы шукаеце, вам можа дапамагчы інфармацыя, што паказваецца пры навядзенні на апрацоўшчык падзеі, што вы выкарыстоўваеце, яна пакажа тып вашай падзеі.

Expand Down Expand Up @@ -439,7 +439,7 @@ interface ModalRendererProps {

### Пропс стыляў {/*typing-style-props*/}

Калі вы выкарыстоўваеце ўбудаваныя стылі ў React, вы можаце выкарыстоўваць `React.CSSProperties` для апісання аб’екта, перадаваемага ў пропс `style`. Дадзены тып уключае ўсе магчымыя CSS параметры і ёсць добрым спосабам пераканацца, што вы перадаяце правільны пропс `style`, і атрымаць аўтадапаўненне ў рэдактары кода.
Калі вы выкарыстоўваеце ўбудаваныя стылі ў React, вы можаце выкарыстоўваць `React.CSSProperties` для апісання аб’екта, перадаваемага ў пропс `style`. Дадзены тып уключае ўсе магчымыя CSS параметры і з’яўляецца добрым спосабам пераканацца, што вы перадаяце правільны пропс `style`, і атрымаць аўтадапаўненне ў рэдактары кода.

```ts
interface MyComponentProps {
Expand Down

0 comments on commit 9d9aa56

Please sign in to comment.