From 99dffd0a1de9e2aac2826f308bbef7fcc438c1b1 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Fri, 28 Feb 2025 14:39:31 +0300 Subject: [PATCH] add typescript --- docs/api/01-rest-api.md | 5 + docs/api/02-http.md | 5 + docs/api/03-http-status.md | 5 + docs/api/04-query-types.md | 5 + docs/api/05-polling.md | 5 + docs/api/06-websocket.md | 5 + docs/api/07-graphql.md | 5 + docs/api/_category_.json | 7 + docs/{architect => architecture}/.gitkeep | 0 docs/architecture/01-review.md | 5 + docs/architecture/02-classic.md | 5 + docs/architecture/03-atomic-design.md | 5 + docs/architecture/04-domain.md | 5 + docs/architecture/05-feature-slice-desing.md | 5 + docs/architecture/06-tdd.md | 5 + docs/architecture/_category_.json | 7 + docs/{css => browser}/.gitkeep | 0 docs/browser/01-about-browser.md | 7 + docs/browser/02-dom.md | 5 + docs/browser/03-cssom.md | 5 + docs/browser/04-critical-render-path.md | 5 + docs/browser/05-dev-tools.md | 5 + docs/browser/_category_.json | 7 + docs/git/01-git.md | 5 + docs/git/02-ci-cd.md | 5 + docs/git/_category_.json | 7 + docs/{html => html-css}/.gitkeep | 0 docs/html-css/01-position.md | 5 + docs/html-css/02-flex-grid.md | 5 + docs/html-css/03-semantic-tags.md | 5 + docs/html-css/04-block-model.md | 5 + docs/html-css/05-selectors.md | 5 + docs/html-css/06-preprocessors.md | 5 + docs/html-css/07-size-units.md | 5 + docs/html-css/_category_.json | 7 + docs/javascript/{base => 01-base}/.gitkeep | 0 .../javascript/{base => 01-base}/01-strict.md | 0 .../{base => 01-base}/02-variables.md | 0 .../{base => 01-base}/03-type-conversion.md | 0 .../{base => 01-base}/04-operators.md | 0 .../{base => 01-base}/05-compare-ops.md | 0 .../{base => 01-base}/06-conditions-logic.md | 0 .../javascript/{base => 01-base}/07-cycles.md | 0 .../{base => 01-base}/08-garbage-collector.md | 0 .../{base => 01-base}/_category_.json | 0 .../{classes => 02-objects}/.gitkeep | 0 .../{objects => 02-objects}/01-intro.md | 0 .../02-copying-objects.md | 0 .../03-methods-this.md | 0 .../04-constructor-new-op.md | 0 .../05-option-chaining.md | 0 .../{objects => 02-objects}/06-symbol.md | 0 .../07-objects-to-primitives.md | 0 .../{objects => 02-objects}/_category_.json | 0 .../{data-types => 03-data-types}/.gitkeep | 0 .../01-primitive-methods.md | 0 .../_category_.json | 0 .../{functions => 04-functions}/.gitkeep | 0 .../{functions => 04-functions}/01-intro.md | 0 .../02-func-declaration.md | 0 .../03-func-expression.md | 0 .../04-arrow-func.md | 0 .../_category_.json | 0 .../{generators => 05-prototypes}/.gitkeep | 0 .../_category_.json | 0 .../{classes => 05-prototypes}/index.md | 0 .../{modules => 06-classes}/.gitkeep | 0 .../{classes => 06-classes}/_category_.json | 0 .../{generators => 06-classes}/index.md | 0 .../{objects => 07-try-catch}/.gitkeep | 0 .../_category_.json | 0 .../{modules => 07-try-catch}/index.md | 0 .../{others => 08-promises}/.gitkeep | 0 .../{promises => 08-promises}/_category_.json | 0 .../{others => 08-promises}/index.md | 0 .../{promises => 09-generators}/.gitkeep | 0 .../_category_.json | 0 .../{promises => 09-generators}/index.md | 0 .../{prototypes => 10-modules}/.gitkeep | 0 .../{modules => 10-modules}/_category_.json | 0 .../{prototypes => 10-modules}/index.md | 0 .../{try-catch => 11-others}/.gitkeep | 0 .../{others => 11-others}/_category_.json | 0 .../{try-catch => 11-others}/index.md | 0 docs/javascript/_category_.json | 2 +- docs/react/01-intro.md | 5 + docs/react/02-v-dom.md | 5 + docs/react/03-lifecycle.md | 5 + docs/react/04-props-state.md | 5 + docs/react/05-base-hooks.md | 5 + docs/react/06-hocs.md | 5 + docs/react/07-optimization-hooks.md | 5 + docs/react/08-advanced-hooks.md | 5 + docs/react/09-render-portal.md | 5 + docs/react/_category_.json | 7 + docs/state-managers/01-intro.md | 5 + docs/state-managers/02-redux.md | 5 + docs/state-managers/03-rtk-query.md | 5 + docs/state-managers/04-zustand.md | 5 + docs/state-managers/05-apollo-graphql.md | 5 + .../state-managers/06-tenstack-react-query.md | 5 + docs/state-managers/07-mobx.md | 5 + docs/state-managers/_category_.json | 7 + docs/tasks/01-base-js/_category_.json | 7 + docs/tasks/01-base-js/index.md | 3 + docs/tasks/02-adv-js/_category_.json | 7 + docs/tasks/02-adv-js/index.md | 3 + docs/tasks/03-event-loop/_category_.json | 7 + docs/tasks/03-event-loop/index.md | 3 + docs/tasks/04-api-queries/_category_.json | 7 + docs/tasks/04-api-queries/index.md | 3 + .../05-optimizing-react-app/_category_.json | 7 + docs/tasks/05-optimizing-react-app/index.md | 3 + docs/tasks/06-algorithms/_category_.json | 7 + docs/tasks/06-algorithms/index.md | 3 + docs/tasks/_category_.json | 7 + docs/tasks/tasks.md | 0 docs/team/01-processes.md | 5 + docs/team/02-methodology.md | 5 + docs/team/03-interaction.md | 5 + docs/team/_category_.json | 7 + docs/tutorial-basics/_category_.json | 8 - docs/tutorial-basics/congratulations.md | 23 -- docs/tutorial-basics/create-a-blog-post.md | 34 --- docs/tutorial-basics/create-a-document.md | 57 ----- docs/tutorial-basics/create-a-page.md | 43 ---- docs/tutorial-basics/deploy-your-site.md | 31 --- docs/tutorial-basics/markdown-features.mdx | 152 ------------ docs/typescript/01-intro.md | 60 +++++ docs/typescript/02-types-vs-interface.md | 157 +++++++++++++ docs/typescript/03-utility-types.md | 222 ++++++++++++++++++ docs/typescript/04-generic-types.md | 86 +++++++ docs/typescript/05-type-guards.md | 113 +++++++++ docs/typescript/06-enums-vs-as-const.md | 97 ++++++++ docs/typescript/_category_.json | 7 + 135 files changed, 1098 insertions(+), 349 deletions(-) create mode 100644 docs/api/01-rest-api.md create mode 100644 docs/api/02-http.md create mode 100644 docs/api/03-http-status.md create mode 100644 docs/api/04-query-types.md create mode 100644 docs/api/05-polling.md create mode 100644 docs/api/06-websocket.md create mode 100644 docs/api/07-graphql.md create mode 100644 docs/api/_category_.json rename docs/{architect => architecture}/.gitkeep (100%) create mode 100644 docs/architecture/01-review.md create mode 100644 docs/architecture/02-classic.md create mode 100644 docs/architecture/03-atomic-design.md create mode 100644 docs/architecture/04-domain.md create mode 100644 docs/architecture/05-feature-slice-desing.md create mode 100644 docs/architecture/06-tdd.md create mode 100644 docs/architecture/_category_.json rename docs/{css => browser}/.gitkeep (100%) create mode 100644 docs/browser/01-about-browser.md create mode 100644 docs/browser/02-dom.md create mode 100644 docs/browser/03-cssom.md create mode 100644 docs/browser/04-critical-render-path.md create mode 100644 docs/browser/05-dev-tools.md create mode 100644 docs/browser/_category_.json create mode 100644 docs/git/01-git.md create mode 100644 docs/git/02-ci-cd.md create mode 100644 docs/git/_category_.json rename docs/{html => html-css}/.gitkeep (100%) create mode 100644 docs/html-css/01-position.md create mode 100644 docs/html-css/02-flex-grid.md create mode 100644 docs/html-css/03-semantic-tags.md create mode 100644 docs/html-css/04-block-model.md create mode 100644 docs/html-css/05-selectors.md create mode 100644 docs/html-css/06-preprocessors.md create mode 100644 docs/html-css/07-size-units.md create mode 100644 docs/html-css/_category_.json rename docs/javascript/{base => 01-base}/.gitkeep (100%) rename docs/javascript/{base => 01-base}/01-strict.md (100%) rename docs/javascript/{base => 01-base}/02-variables.md (100%) rename docs/javascript/{base => 01-base}/03-type-conversion.md (100%) rename docs/javascript/{base => 01-base}/04-operators.md (100%) rename docs/javascript/{base => 01-base}/05-compare-ops.md (100%) rename docs/javascript/{base => 01-base}/06-conditions-logic.md (100%) rename docs/javascript/{base => 01-base}/07-cycles.md (100%) rename docs/javascript/{base => 01-base}/08-garbage-collector.md (100%) rename docs/javascript/{base => 01-base}/_category_.json (100%) rename docs/javascript/{classes => 02-objects}/.gitkeep (100%) rename docs/javascript/{objects => 02-objects}/01-intro.md (100%) rename docs/javascript/{objects => 02-objects}/02-copying-objects.md (100%) rename docs/javascript/{objects => 02-objects}/03-methods-this.md (100%) rename docs/javascript/{objects => 02-objects}/04-constructor-new-op.md (100%) rename docs/javascript/{objects => 02-objects}/05-option-chaining.md (100%) rename docs/javascript/{objects => 02-objects}/06-symbol.md (100%) rename docs/javascript/{objects => 02-objects}/07-objects-to-primitives.md (100%) rename docs/javascript/{objects => 02-objects}/_category_.json (100%) rename docs/javascript/{data-types => 03-data-types}/.gitkeep (100%) rename docs/javascript/{data-types => 03-data-types}/01-primitive-methods.md (100%) rename docs/javascript/{data-types => 03-data-types}/_category_.json (100%) rename docs/javascript/{functions => 04-functions}/.gitkeep (100%) rename docs/javascript/{functions => 04-functions}/01-intro.md (100%) rename docs/javascript/{functions => 04-functions}/02-func-declaration.md (100%) rename docs/javascript/{functions => 04-functions}/03-func-expression.md (100%) rename docs/javascript/{functions => 04-functions}/04-arrow-func.md (100%) rename docs/javascript/{functions => 04-functions}/_category_.json (100%) rename docs/javascript/{generators => 05-prototypes}/.gitkeep (100%) rename docs/javascript/{prototypes => 05-prototypes}/_category_.json (100%) rename docs/javascript/{classes => 05-prototypes}/index.md (100%) rename docs/javascript/{modules => 06-classes}/.gitkeep (100%) rename docs/javascript/{classes => 06-classes}/_category_.json (100%) rename docs/javascript/{generators => 06-classes}/index.md (100%) rename docs/javascript/{objects => 07-try-catch}/.gitkeep (100%) rename docs/javascript/{try-catch => 07-try-catch}/_category_.json (100%) rename docs/javascript/{modules => 07-try-catch}/index.md (100%) rename docs/javascript/{others => 08-promises}/.gitkeep (100%) rename docs/javascript/{promises => 08-promises}/_category_.json (100%) rename docs/javascript/{others => 08-promises}/index.md (100%) rename docs/javascript/{promises => 09-generators}/.gitkeep (100%) rename docs/javascript/{generators => 09-generators}/_category_.json (100%) rename docs/javascript/{promises => 09-generators}/index.md (100%) rename docs/javascript/{prototypes => 10-modules}/.gitkeep (100%) rename docs/javascript/{modules => 10-modules}/_category_.json (100%) rename docs/javascript/{prototypes => 10-modules}/index.md (100%) rename docs/javascript/{try-catch => 11-others}/.gitkeep (100%) rename docs/javascript/{others => 11-others}/_category_.json (100%) rename docs/javascript/{try-catch => 11-others}/index.md (100%) create mode 100644 docs/react/01-intro.md create mode 100644 docs/react/02-v-dom.md create mode 100644 docs/react/03-lifecycle.md create mode 100644 docs/react/04-props-state.md create mode 100644 docs/react/05-base-hooks.md create mode 100644 docs/react/06-hocs.md create mode 100644 docs/react/07-optimization-hooks.md create mode 100644 docs/react/08-advanced-hooks.md create mode 100644 docs/react/09-render-portal.md create mode 100644 docs/react/_category_.json create mode 100644 docs/state-managers/01-intro.md create mode 100644 docs/state-managers/02-redux.md create mode 100644 docs/state-managers/03-rtk-query.md create mode 100644 docs/state-managers/04-zustand.md create mode 100644 docs/state-managers/05-apollo-graphql.md create mode 100644 docs/state-managers/06-tenstack-react-query.md create mode 100644 docs/state-managers/07-mobx.md create mode 100644 docs/state-managers/_category_.json create mode 100644 docs/tasks/01-base-js/_category_.json create mode 100644 docs/tasks/01-base-js/index.md create mode 100644 docs/tasks/02-adv-js/_category_.json create mode 100644 docs/tasks/02-adv-js/index.md create mode 100644 docs/tasks/03-event-loop/_category_.json create mode 100644 docs/tasks/03-event-loop/index.md create mode 100644 docs/tasks/04-api-queries/_category_.json create mode 100644 docs/tasks/04-api-queries/index.md create mode 100644 docs/tasks/05-optimizing-react-app/_category_.json create mode 100644 docs/tasks/05-optimizing-react-app/index.md create mode 100644 docs/tasks/06-algorithms/_category_.json create mode 100644 docs/tasks/06-algorithms/index.md create mode 100644 docs/tasks/_category_.json create mode 100644 docs/tasks/tasks.md create mode 100644 docs/team/01-processes.md create mode 100644 docs/team/02-methodology.md create mode 100644 docs/team/03-interaction.md create mode 100644 docs/team/_category_.json delete mode 100644 docs/tutorial-basics/_category_.json delete mode 100644 docs/tutorial-basics/congratulations.md delete mode 100644 docs/tutorial-basics/create-a-blog-post.md delete mode 100644 docs/tutorial-basics/create-a-document.md delete mode 100644 docs/tutorial-basics/create-a-page.md delete mode 100644 docs/tutorial-basics/deploy-your-site.md delete mode 100644 docs/tutorial-basics/markdown-features.mdx create mode 100644 docs/typescript/01-intro.md create mode 100644 docs/typescript/02-types-vs-interface.md create mode 100644 docs/typescript/03-utility-types.md create mode 100644 docs/typescript/04-generic-types.md create mode 100644 docs/typescript/05-type-guards.md create mode 100644 docs/typescript/06-enums-vs-as-const.md create mode 100644 docs/typescript/_category_.json diff --git a/docs/api/01-rest-api.md b/docs/api/01-rest-api.md new file mode 100644 index 0000000..df3ce52 --- /dev/null +++ b/docs/api/01-rest-api.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 1 +--- + +# REST API \ No newline at end of file diff --git a/docs/api/02-http.md b/docs/api/02-http.md new file mode 100644 index 0000000..dad2682 --- /dev/null +++ b/docs/api/02-http.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 2 +--- + +# Протокол HTTP \ No newline at end of file diff --git a/docs/api/03-http-status.md b/docs/api/03-http-status.md new file mode 100644 index 0000000..36494db --- /dev/null +++ b/docs/api/03-http-status.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 3 +--- + +# Статус ответа HTTP \ No newline at end of file diff --git a/docs/api/04-query-types.md b/docs/api/04-query-types.md new file mode 100644 index 0000000..ca8aacd --- /dev/null +++ b/docs/api/04-query-types.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 4 +--- + +# Типы запросов HTTP \ No newline at end of file diff --git a/docs/api/05-polling.md b/docs/api/05-polling.md new file mode 100644 index 0000000..2083ad0 --- /dev/null +++ b/docs/api/05-polling.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 5 +--- + +# Polling \ No newline at end of file diff --git a/docs/api/06-websocket.md b/docs/api/06-websocket.md new file mode 100644 index 0000000..7519545 --- /dev/null +++ b/docs/api/06-websocket.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 6 +--- + +# Websockets \ No newline at end of file diff --git a/docs/api/07-graphql.md b/docs/api/07-graphql.md new file mode 100644 index 0000000..37b75ff --- /dev/null +++ b/docs/api/07-graphql.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 7 +--- + +# GraphQL \ No newline at end of file diff --git a/docs/api/_category_.json b/docs/api/_category_.json new file mode 100644 index 0000000..a9c6cdc --- /dev/null +++ b/docs/api/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "API", + "position": 7, + "link": { + "type": "generated-index" + } +} diff --git a/docs/architect/.gitkeep b/docs/architecture/.gitkeep similarity index 100% rename from docs/architect/.gitkeep rename to docs/architecture/.gitkeep diff --git a/docs/architecture/01-review.md b/docs/architecture/01-review.md new file mode 100644 index 0000000..a7f9a94 --- /dev/null +++ b/docs/architecture/01-review.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 1 +--- + +# Обзор архитектур \ No newline at end of file diff --git a/docs/architecture/02-classic.md b/docs/architecture/02-classic.md new file mode 100644 index 0000000..ffec863 --- /dev/null +++ b/docs/architecture/02-classic.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 2 +--- + +# Классическая архитектура \ No newline at end of file diff --git a/docs/architecture/03-atomic-design.md b/docs/architecture/03-atomic-design.md new file mode 100644 index 0000000..b8e7ef0 --- /dev/null +++ b/docs/architecture/03-atomic-design.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 3 +--- + +# Atomic design \ No newline at end of file diff --git a/docs/architecture/04-domain.md b/docs/architecture/04-domain.md new file mode 100644 index 0000000..12bc437 --- /dev/null +++ b/docs/architecture/04-domain.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 4 +--- + +# Доменная архитектура \ No newline at end of file diff --git a/docs/architecture/05-feature-slice-desing.md b/docs/architecture/05-feature-slice-desing.md new file mode 100644 index 0000000..2321847 --- /dev/null +++ b/docs/architecture/05-feature-slice-desing.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 5 +--- + +# Feature slice design \ No newline at end of file diff --git a/docs/architecture/06-tdd.md b/docs/architecture/06-tdd.md new file mode 100644 index 0000000..33f50c9 --- /dev/null +++ b/docs/architecture/06-tdd.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 6 +--- + +# Test driven development \ No newline at end of file diff --git a/docs/architecture/_category_.json b/docs/architecture/_category_.json new file mode 100644 index 0000000..87e118d --- /dev/null +++ b/docs/architecture/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Architecture", + "position": 10, + "link": { + "type": "generated-index" + } +} diff --git a/docs/css/.gitkeep b/docs/browser/.gitkeep similarity index 100% rename from docs/css/.gitkeep rename to docs/browser/.gitkeep diff --git a/docs/browser/01-about-browser.md b/docs/browser/01-about-browser.md new file mode 100644 index 0000000..096c70f --- /dev/null +++ b/docs/browser/01-about-browser.md @@ -0,0 +1,7 @@ +--- +sidebar_position: 1 +--- + +# Браузер +Как работает браузер? +Из каких модулей(интерфейс, домпарсер, js-движок, рендер, стораджи) состоит браузер \ No newline at end of file diff --git a/docs/browser/02-dom.md b/docs/browser/02-dom.md new file mode 100644 index 0000000..01b50f5 --- /dev/null +++ b/docs/browser/02-dom.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 2 +--- + +# DOM \ No newline at end of file diff --git a/docs/browser/03-cssom.md b/docs/browser/03-cssom.md new file mode 100644 index 0000000..e0b79d6 --- /dev/null +++ b/docs/browser/03-cssom.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 3 +--- + +# CSSOM \ No newline at end of file diff --git a/docs/browser/04-critical-render-path.md b/docs/browser/04-critical-render-path.md new file mode 100644 index 0000000..bbe43ad --- /dev/null +++ b/docs/browser/04-critical-render-path.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 4 +--- + +# Critical render path \ No newline at end of file diff --git a/docs/browser/05-dev-tools.md b/docs/browser/05-dev-tools.md new file mode 100644 index 0000000..4578e7c --- /dev/null +++ b/docs/browser/05-dev-tools.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 5 +--- + +# Browser Dev-tools \ No newline at end of file diff --git a/docs/browser/_category_.json b/docs/browser/_category_.json new file mode 100644 index 0000000..8ed3df9 --- /dev/null +++ b/docs/browser/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Browser", + "position": 1, + "link": { + "type": "generated-index" + } +} diff --git a/docs/git/01-git.md b/docs/git/01-git.md new file mode 100644 index 0000000..738083c --- /dev/null +++ b/docs/git/01-git.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 1 +--- + +# Git \ No newline at end of file diff --git a/docs/git/02-ci-cd.md b/docs/git/02-ci-cd.md new file mode 100644 index 0000000..d9ca12d --- /dev/null +++ b/docs/git/02-ci-cd.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 2 +--- + +# CI/CD \ No newline at end of file diff --git a/docs/git/_category_.json b/docs/git/_category_.json new file mode 100644 index 0000000..1345838 --- /dev/null +++ b/docs/git/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Git", + "position": 8, + "link": { + "type": "generated-index" + } +} diff --git a/docs/html/.gitkeep b/docs/html-css/.gitkeep similarity index 100% rename from docs/html/.gitkeep rename to docs/html-css/.gitkeep diff --git a/docs/html-css/01-position.md b/docs/html-css/01-position.md new file mode 100644 index 0000000..c7b7525 --- /dev/null +++ b/docs/html-css/01-position.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 1 +--- + +# Position \ No newline at end of file diff --git a/docs/html-css/02-flex-grid.md b/docs/html-css/02-flex-grid.md new file mode 100644 index 0000000..c7a6b9b --- /dev/null +++ b/docs/html-css/02-flex-grid.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 2 +--- + +# Сетка flexbox, grid \ No newline at end of file diff --git a/docs/html-css/03-semantic-tags.md b/docs/html-css/03-semantic-tags.md new file mode 100644 index 0000000..5d50abb --- /dev/null +++ b/docs/html-css/03-semantic-tags.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 3 +--- + +# Семантические тэги \ No newline at end of file diff --git a/docs/html-css/04-block-model.md b/docs/html-css/04-block-model.md new file mode 100644 index 0000000..920907d --- /dev/null +++ b/docs/html-css/04-block-model.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 4 +--- + +# Блочная модель \ No newline at end of file diff --git a/docs/html-css/05-selectors.md b/docs/html-css/05-selectors.md new file mode 100644 index 0000000..a9d8535 --- /dev/null +++ b/docs/html-css/05-selectors.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 5 +--- + +# Селекторы, специфичность \ No newline at end of file diff --git a/docs/html-css/06-preprocessors.md b/docs/html-css/06-preprocessors.md new file mode 100644 index 0000000..e900a6c --- /dev/null +++ b/docs/html-css/06-preprocessors.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 6 +--- + +# Препроцессоры \ No newline at end of file diff --git a/docs/html-css/07-size-units.md b/docs/html-css/07-size-units.md new file mode 100644 index 0000000..a9747a7 --- /dev/null +++ b/docs/html-css/07-size-units.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 7 +--- + +# Единицы измерения в CSS \ No newline at end of file diff --git a/docs/html-css/_category_.json b/docs/html-css/_category_.json new file mode 100644 index 0000000..f0e9332 --- /dev/null +++ b/docs/html-css/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "HTML / CSS", + "position": 2, + "link": { + "type": "generated-index" + } +} diff --git a/docs/javascript/base/.gitkeep b/docs/javascript/01-base/.gitkeep similarity index 100% rename from docs/javascript/base/.gitkeep rename to docs/javascript/01-base/.gitkeep diff --git a/docs/javascript/base/01-strict.md b/docs/javascript/01-base/01-strict.md similarity index 100% rename from docs/javascript/base/01-strict.md rename to docs/javascript/01-base/01-strict.md diff --git a/docs/javascript/base/02-variables.md b/docs/javascript/01-base/02-variables.md similarity index 100% rename from docs/javascript/base/02-variables.md rename to docs/javascript/01-base/02-variables.md diff --git a/docs/javascript/base/03-type-conversion.md b/docs/javascript/01-base/03-type-conversion.md similarity index 100% rename from docs/javascript/base/03-type-conversion.md rename to docs/javascript/01-base/03-type-conversion.md diff --git a/docs/javascript/base/04-operators.md b/docs/javascript/01-base/04-operators.md similarity index 100% rename from docs/javascript/base/04-operators.md rename to docs/javascript/01-base/04-operators.md diff --git a/docs/javascript/base/05-compare-ops.md b/docs/javascript/01-base/05-compare-ops.md similarity index 100% rename from docs/javascript/base/05-compare-ops.md rename to docs/javascript/01-base/05-compare-ops.md diff --git a/docs/javascript/base/06-conditions-logic.md b/docs/javascript/01-base/06-conditions-logic.md similarity index 100% rename from docs/javascript/base/06-conditions-logic.md rename to docs/javascript/01-base/06-conditions-logic.md diff --git a/docs/javascript/base/07-cycles.md b/docs/javascript/01-base/07-cycles.md similarity index 100% rename from docs/javascript/base/07-cycles.md rename to docs/javascript/01-base/07-cycles.md diff --git a/docs/javascript/base/08-garbage-collector.md b/docs/javascript/01-base/08-garbage-collector.md similarity index 100% rename from docs/javascript/base/08-garbage-collector.md rename to docs/javascript/01-base/08-garbage-collector.md diff --git a/docs/javascript/base/_category_.json b/docs/javascript/01-base/_category_.json similarity index 100% rename from docs/javascript/base/_category_.json rename to docs/javascript/01-base/_category_.json diff --git a/docs/javascript/classes/.gitkeep b/docs/javascript/02-objects/.gitkeep similarity index 100% rename from docs/javascript/classes/.gitkeep rename to docs/javascript/02-objects/.gitkeep diff --git a/docs/javascript/objects/01-intro.md b/docs/javascript/02-objects/01-intro.md similarity index 100% rename from docs/javascript/objects/01-intro.md rename to docs/javascript/02-objects/01-intro.md diff --git a/docs/javascript/objects/02-copying-objects.md b/docs/javascript/02-objects/02-copying-objects.md similarity index 100% rename from docs/javascript/objects/02-copying-objects.md rename to docs/javascript/02-objects/02-copying-objects.md diff --git a/docs/javascript/objects/03-methods-this.md b/docs/javascript/02-objects/03-methods-this.md similarity index 100% rename from docs/javascript/objects/03-methods-this.md rename to docs/javascript/02-objects/03-methods-this.md diff --git a/docs/javascript/objects/04-constructor-new-op.md b/docs/javascript/02-objects/04-constructor-new-op.md similarity index 100% rename from docs/javascript/objects/04-constructor-new-op.md rename to docs/javascript/02-objects/04-constructor-new-op.md diff --git a/docs/javascript/objects/05-option-chaining.md b/docs/javascript/02-objects/05-option-chaining.md similarity index 100% rename from docs/javascript/objects/05-option-chaining.md rename to docs/javascript/02-objects/05-option-chaining.md diff --git a/docs/javascript/objects/06-symbol.md b/docs/javascript/02-objects/06-symbol.md similarity index 100% rename from docs/javascript/objects/06-symbol.md rename to docs/javascript/02-objects/06-symbol.md diff --git a/docs/javascript/objects/07-objects-to-primitives.md b/docs/javascript/02-objects/07-objects-to-primitives.md similarity index 100% rename from docs/javascript/objects/07-objects-to-primitives.md rename to docs/javascript/02-objects/07-objects-to-primitives.md diff --git a/docs/javascript/objects/_category_.json b/docs/javascript/02-objects/_category_.json similarity index 100% rename from docs/javascript/objects/_category_.json rename to docs/javascript/02-objects/_category_.json diff --git a/docs/javascript/data-types/.gitkeep b/docs/javascript/03-data-types/.gitkeep similarity index 100% rename from docs/javascript/data-types/.gitkeep rename to docs/javascript/03-data-types/.gitkeep diff --git a/docs/javascript/data-types/01-primitive-methods.md b/docs/javascript/03-data-types/01-primitive-methods.md similarity index 100% rename from docs/javascript/data-types/01-primitive-methods.md rename to docs/javascript/03-data-types/01-primitive-methods.md diff --git a/docs/javascript/data-types/_category_.json b/docs/javascript/03-data-types/_category_.json similarity index 100% rename from docs/javascript/data-types/_category_.json rename to docs/javascript/03-data-types/_category_.json diff --git a/docs/javascript/functions/.gitkeep b/docs/javascript/04-functions/.gitkeep similarity index 100% rename from docs/javascript/functions/.gitkeep rename to docs/javascript/04-functions/.gitkeep diff --git a/docs/javascript/functions/01-intro.md b/docs/javascript/04-functions/01-intro.md similarity index 100% rename from docs/javascript/functions/01-intro.md rename to docs/javascript/04-functions/01-intro.md diff --git a/docs/javascript/functions/02-func-declaration.md b/docs/javascript/04-functions/02-func-declaration.md similarity index 100% rename from docs/javascript/functions/02-func-declaration.md rename to docs/javascript/04-functions/02-func-declaration.md diff --git a/docs/javascript/functions/03-func-expression.md b/docs/javascript/04-functions/03-func-expression.md similarity index 100% rename from docs/javascript/functions/03-func-expression.md rename to docs/javascript/04-functions/03-func-expression.md diff --git a/docs/javascript/functions/04-arrow-func.md b/docs/javascript/04-functions/04-arrow-func.md similarity index 100% rename from docs/javascript/functions/04-arrow-func.md rename to docs/javascript/04-functions/04-arrow-func.md diff --git a/docs/javascript/functions/_category_.json b/docs/javascript/04-functions/_category_.json similarity index 100% rename from docs/javascript/functions/_category_.json rename to docs/javascript/04-functions/_category_.json diff --git a/docs/javascript/generators/.gitkeep b/docs/javascript/05-prototypes/.gitkeep similarity index 100% rename from docs/javascript/generators/.gitkeep rename to docs/javascript/05-prototypes/.gitkeep diff --git a/docs/javascript/prototypes/_category_.json b/docs/javascript/05-prototypes/_category_.json similarity index 100% rename from docs/javascript/prototypes/_category_.json rename to docs/javascript/05-prototypes/_category_.json diff --git a/docs/javascript/classes/index.md b/docs/javascript/05-prototypes/index.md similarity index 100% rename from docs/javascript/classes/index.md rename to docs/javascript/05-prototypes/index.md diff --git a/docs/javascript/modules/.gitkeep b/docs/javascript/06-classes/.gitkeep similarity index 100% rename from docs/javascript/modules/.gitkeep rename to docs/javascript/06-classes/.gitkeep diff --git a/docs/javascript/classes/_category_.json b/docs/javascript/06-classes/_category_.json similarity index 100% rename from docs/javascript/classes/_category_.json rename to docs/javascript/06-classes/_category_.json diff --git a/docs/javascript/generators/index.md b/docs/javascript/06-classes/index.md similarity index 100% rename from docs/javascript/generators/index.md rename to docs/javascript/06-classes/index.md diff --git a/docs/javascript/objects/.gitkeep b/docs/javascript/07-try-catch/.gitkeep similarity index 100% rename from docs/javascript/objects/.gitkeep rename to docs/javascript/07-try-catch/.gitkeep diff --git a/docs/javascript/try-catch/_category_.json b/docs/javascript/07-try-catch/_category_.json similarity index 100% rename from docs/javascript/try-catch/_category_.json rename to docs/javascript/07-try-catch/_category_.json diff --git a/docs/javascript/modules/index.md b/docs/javascript/07-try-catch/index.md similarity index 100% rename from docs/javascript/modules/index.md rename to docs/javascript/07-try-catch/index.md diff --git a/docs/javascript/others/.gitkeep b/docs/javascript/08-promises/.gitkeep similarity index 100% rename from docs/javascript/others/.gitkeep rename to docs/javascript/08-promises/.gitkeep diff --git a/docs/javascript/promises/_category_.json b/docs/javascript/08-promises/_category_.json similarity index 100% rename from docs/javascript/promises/_category_.json rename to docs/javascript/08-promises/_category_.json diff --git a/docs/javascript/others/index.md b/docs/javascript/08-promises/index.md similarity index 100% rename from docs/javascript/others/index.md rename to docs/javascript/08-promises/index.md diff --git a/docs/javascript/promises/.gitkeep b/docs/javascript/09-generators/.gitkeep similarity index 100% rename from docs/javascript/promises/.gitkeep rename to docs/javascript/09-generators/.gitkeep diff --git a/docs/javascript/generators/_category_.json b/docs/javascript/09-generators/_category_.json similarity index 100% rename from docs/javascript/generators/_category_.json rename to docs/javascript/09-generators/_category_.json diff --git a/docs/javascript/promises/index.md b/docs/javascript/09-generators/index.md similarity index 100% rename from docs/javascript/promises/index.md rename to docs/javascript/09-generators/index.md diff --git a/docs/javascript/prototypes/.gitkeep b/docs/javascript/10-modules/.gitkeep similarity index 100% rename from docs/javascript/prototypes/.gitkeep rename to docs/javascript/10-modules/.gitkeep diff --git a/docs/javascript/modules/_category_.json b/docs/javascript/10-modules/_category_.json similarity index 100% rename from docs/javascript/modules/_category_.json rename to docs/javascript/10-modules/_category_.json diff --git a/docs/javascript/prototypes/index.md b/docs/javascript/10-modules/index.md similarity index 100% rename from docs/javascript/prototypes/index.md rename to docs/javascript/10-modules/index.md diff --git a/docs/javascript/try-catch/.gitkeep b/docs/javascript/11-others/.gitkeep similarity index 100% rename from docs/javascript/try-catch/.gitkeep rename to docs/javascript/11-others/.gitkeep diff --git a/docs/javascript/others/_category_.json b/docs/javascript/11-others/_category_.json similarity index 100% rename from docs/javascript/others/_category_.json rename to docs/javascript/11-others/_category_.json diff --git a/docs/javascript/try-catch/index.md b/docs/javascript/11-others/index.md similarity index 100% rename from docs/javascript/try-catch/index.md rename to docs/javascript/11-others/index.md diff --git a/docs/javascript/_category_.json b/docs/javascript/_category_.json index 36df32f..45d0468 100644 --- a/docs/javascript/_category_.json +++ b/docs/javascript/_category_.json @@ -1,6 +1,6 @@ { "label": "Javascript", - "position": 4, + "position": 3, "link": { "type": "generated-index" } diff --git a/docs/react/01-intro.md b/docs/react/01-intro.md new file mode 100644 index 0000000..57b7e8e --- /dev/null +++ b/docs/react/01-intro.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 1 +--- + +# Зачем нужен React \ No newline at end of file diff --git a/docs/react/02-v-dom.md b/docs/react/02-v-dom.md new file mode 100644 index 0000000..cbacf8c --- /dev/null +++ b/docs/react/02-v-dom.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 2 +--- + +# Виртуальный DOM \ No newline at end of file diff --git a/docs/react/03-lifecycle.md b/docs/react/03-lifecycle.md new file mode 100644 index 0000000..fff3f01 --- /dev/null +++ b/docs/react/03-lifecycle.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 3 +--- + +# Жизненный цикл компонента \ No newline at end of file diff --git a/docs/react/04-props-state.md b/docs/react/04-props-state.md new file mode 100644 index 0000000..868a6a4 --- /dev/null +++ b/docs/react/04-props-state.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 4 +--- + +# Состояние и пропсы компонентов \ No newline at end of file diff --git a/docs/react/05-base-hooks.md b/docs/react/05-base-hooks.md new file mode 100644 index 0000000..b62681c --- /dev/null +++ b/docs/react/05-base-hooks.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 5 +--- + +# Базовые хуки React \ No newline at end of file diff --git a/docs/react/06-hocs.md b/docs/react/06-hocs.md new file mode 100644 index 0000000..729bdab --- /dev/null +++ b/docs/react/06-hocs.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 6 +--- + +# Что такое HOC \ No newline at end of file diff --git a/docs/react/07-optimization-hooks.md b/docs/react/07-optimization-hooks.md new file mode 100644 index 0000000..03e66df --- /dev/null +++ b/docs/react/07-optimization-hooks.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 7 +--- + +# Хуки оптимизации и кэширования \ No newline at end of file diff --git a/docs/react/08-advanced-hooks.md b/docs/react/08-advanced-hooks.md new file mode 100644 index 0000000..1239154 --- /dev/null +++ b/docs/react/08-advanced-hooks.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 8 +--- + +# Прочие хуки React \ No newline at end of file diff --git a/docs/react/09-render-portal.md b/docs/react/09-render-portal.md new file mode 100644 index 0000000..47558d4 --- /dev/null +++ b/docs/react/09-render-portal.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 9 +--- + +# Render portal \ No newline at end of file diff --git a/docs/react/_category_.json b/docs/react/_category_.json new file mode 100644 index 0000000..7d545a9 --- /dev/null +++ b/docs/react/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "React", + "position": 5, + "link": { + "type": "generated-index" + } +} diff --git a/docs/state-managers/01-intro.md b/docs/state-managers/01-intro.md new file mode 100644 index 0000000..ef1901a --- /dev/null +++ b/docs/state-managers/01-intro.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 1 +--- + +# Зачем нужны state менеджеры \ No newline at end of file diff --git a/docs/state-managers/02-redux.md b/docs/state-managers/02-redux.md new file mode 100644 index 0000000..7553cf9 --- /dev/null +++ b/docs/state-managers/02-redux.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 2 +--- + +# Экосистема Redux \ No newline at end of file diff --git a/docs/state-managers/03-rtk-query.md b/docs/state-managers/03-rtk-query.md new file mode 100644 index 0000000..908fc38 --- /dev/null +++ b/docs/state-managers/03-rtk-query.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 3 +--- + +# RTK-query \ No newline at end of file diff --git a/docs/state-managers/04-zustand.md b/docs/state-managers/04-zustand.md new file mode 100644 index 0000000..55893e7 --- /dev/null +++ b/docs/state-managers/04-zustand.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 4 +--- + +# Zustand \ No newline at end of file diff --git a/docs/state-managers/05-apollo-graphql.md b/docs/state-managers/05-apollo-graphql.md new file mode 100644 index 0000000..7557c38 --- /dev/null +++ b/docs/state-managers/05-apollo-graphql.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 5 +--- + +# Apollo graphql \ No newline at end of file diff --git a/docs/state-managers/06-tenstack-react-query.md b/docs/state-managers/06-tenstack-react-query.md new file mode 100644 index 0000000..5e710e0 --- /dev/null +++ b/docs/state-managers/06-tenstack-react-query.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 6 +--- + +# React-query \ No newline at end of file diff --git a/docs/state-managers/07-mobx.md b/docs/state-managers/07-mobx.md new file mode 100644 index 0000000..936cef8 --- /dev/null +++ b/docs/state-managers/07-mobx.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 7 +--- + +# Mobx \ No newline at end of file diff --git a/docs/state-managers/_category_.json b/docs/state-managers/_category_.json new file mode 100644 index 0000000..fc15d70 --- /dev/null +++ b/docs/state-managers/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "State managers", + "position": 6, + "link": { + "type": "generated-index" + } +} diff --git a/docs/tasks/01-base-js/_category_.json b/docs/tasks/01-base-js/_category_.json new file mode 100644 index 0000000..dbb38fb --- /dev/null +++ b/docs/tasks/01-base-js/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Base Javascript", + "position": 1, + "link": { + "type": "generated-index" + } +} diff --git a/docs/tasks/01-base-js/index.md b/docs/tasks/01-base-js/index.md new file mode 100644 index 0000000..ef0119d --- /dev/null +++ b/docs/tasks/01-base-js/index.md @@ -0,0 +1,3 @@ +--- +sidebar_position: 1 +--- \ No newline at end of file diff --git a/docs/tasks/02-adv-js/_category_.json b/docs/tasks/02-adv-js/_category_.json new file mode 100644 index 0000000..af0c229 --- /dev/null +++ b/docs/tasks/02-adv-js/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Advanced Javascript", + "position": 2, + "link": { + "type": "generated-index" + } +} diff --git a/docs/tasks/02-adv-js/index.md b/docs/tasks/02-adv-js/index.md new file mode 100644 index 0000000..ef0119d --- /dev/null +++ b/docs/tasks/02-adv-js/index.md @@ -0,0 +1,3 @@ +--- +sidebar_position: 1 +--- \ No newline at end of file diff --git a/docs/tasks/03-event-loop/_category_.json b/docs/tasks/03-event-loop/_category_.json new file mode 100644 index 0000000..6425207 --- /dev/null +++ b/docs/tasks/03-event-loop/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Event Loop JS", + "position": 3, + "link": { + "type": "generated-index" + } +} diff --git a/docs/tasks/03-event-loop/index.md b/docs/tasks/03-event-loop/index.md new file mode 100644 index 0000000..ef0119d --- /dev/null +++ b/docs/tasks/03-event-loop/index.md @@ -0,0 +1,3 @@ +--- +sidebar_position: 1 +--- \ No newline at end of file diff --git a/docs/tasks/04-api-queries/_category_.json b/docs/tasks/04-api-queries/_category_.json new file mode 100644 index 0000000..c2f719c --- /dev/null +++ b/docs/tasks/04-api-queries/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Api queries", + "position": 4, + "link": { + "type": "generated-index" + } +} diff --git a/docs/tasks/04-api-queries/index.md b/docs/tasks/04-api-queries/index.md new file mode 100644 index 0000000..ef0119d --- /dev/null +++ b/docs/tasks/04-api-queries/index.md @@ -0,0 +1,3 @@ +--- +sidebar_position: 1 +--- \ No newline at end of file diff --git a/docs/tasks/05-optimizing-react-app/_category_.json b/docs/tasks/05-optimizing-react-app/_category_.json new file mode 100644 index 0000000..36258ce --- /dev/null +++ b/docs/tasks/05-optimizing-react-app/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Оптимизация", + "position": 5, + "link": { + "type": "generated-index" + } +} diff --git a/docs/tasks/05-optimizing-react-app/index.md b/docs/tasks/05-optimizing-react-app/index.md new file mode 100644 index 0000000..ef0119d --- /dev/null +++ b/docs/tasks/05-optimizing-react-app/index.md @@ -0,0 +1,3 @@ +--- +sidebar_position: 1 +--- \ No newline at end of file diff --git a/docs/tasks/06-algorithms/_category_.json b/docs/tasks/06-algorithms/_category_.json new file mode 100644 index 0000000..a04255d --- /dev/null +++ b/docs/tasks/06-algorithms/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Алгоритмы", + "position": 6, + "link": { + "type": "generated-index" + } +} diff --git a/docs/tasks/06-algorithms/index.md b/docs/tasks/06-algorithms/index.md new file mode 100644 index 0000000..ef0119d --- /dev/null +++ b/docs/tasks/06-algorithms/index.md @@ -0,0 +1,3 @@ +--- +sidebar_position: 1 +--- \ No newline at end of file diff --git a/docs/tasks/_category_.json b/docs/tasks/_category_.json new file mode 100644 index 0000000..941f7da --- /dev/null +++ b/docs/tasks/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Tasks", + "position": 11, + "link": { + "type": "generated-index" + } +} diff --git a/docs/tasks/tasks.md b/docs/tasks/tasks.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/team/01-processes.md b/docs/team/01-processes.md new file mode 100644 index 0000000..6ed576e --- /dev/null +++ b/docs/team/01-processes.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 1 +--- + +# Процессы в команде \ No newline at end of file diff --git a/docs/team/02-methodology.md b/docs/team/02-methodology.md new file mode 100644 index 0000000..a96e8b5 --- /dev/null +++ b/docs/team/02-methodology.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 2 +--- + +# Методологии разработки \ No newline at end of file diff --git a/docs/team/03-interaction.md b/docs/team/03-interaction.md new file mode 100644 index 0000000..68dd301 --- /dev/null +++ b/docs/team/03-interaction.md @@ -0,0 +1,5 @@ +--- +sidebar_position: 3 +--- + +# Взаимодействие в команде \ No newline at end of file diff --git a/docs/team/_category_.json b/docs/team/_category_.json new file mode 100644 index 0000000..903e692 --- /dev/null +++ b/docs/team/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Team work", + "position": 9, + "link": { + "type": "generated-index" + } +} diff --git a/docs/tutorial-basics/_category_.json b/docs/tutorial-basics/_category_.json deleted file mode 100644 index 2e6db55..0000000 --- a/docs/tutorial-basics/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Tutorial - Basics", - "position": 2, - "link": { - "type": "generated-index", - "description": "5 minutes to learn the most important Docusaurus concepts." - } -} diff --git a/docs/tutorial-basics/congratulations.md b/docs/tutorial-basics/congratulations.md deleted file mode 100644 index 04771a0..0000000 --- a/docs/tutorial-basics/congratulations.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Congratulations! - -You have just learned the **basics of Docusaurus** and made some changes to the **initial template**. - -Docusaurus has **much more to offer**! - -Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**. - -Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610) - -## What's next? - -- Read the [official documentation](https://docusaurus.io/) -- Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config) -- Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration) -- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout) -- Add a [search bar](https://docusaurus.io/docs/search) -- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase) -- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support) diff --git a/docs/tutorial-basics/create-a-blog-post.md b/docs/tutorial-basics/create-a-blog-post.md deleted file mode 100644 index 550ae17..0000000 --- a/docs/tutorial-basics/create-a-blog-post.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Create a Blog Post - -Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed... - -## Create your first Post - -Create a file at `blog/2021-02-28-greetings.md`: - -```md title="blog/2021-02-28-greetings.md" ---- -slug: greetings -title: Greetings! -authors: - - name: Joel Marcey - title: Co-creator of Docusaurus 1 - url: https://github.com/JoelMarcey - image_url: https://github.com/JoelMarcey.png - - name: Sébastien Lorber - title: Docusaurus maintainer - url: https://sebastienlorber.com - image_url: https://github.com/slorber.png -tags: [greetings] ---- - -Congratulations, you have made your first post! - -Feel free to play around and edit this post as much as you like. -``` - -A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings). diff --git a/docs/tutorial-basics/create-a-document.md b/docs/tutorial-basics/create-a-document.md deleted file mode 100644 index c22fe29..0000000 --- a/docs/tutorial-basics/create-a-document.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Create a Document - -Documents are **groups of pages** connected through: - -- a **sidebar** -- **previous/next navigation** -- **versioning** - -## Create your first Doc - -Create a Markdown file at `docs/hello.md`: - -```md title="docs/hello.md" -# Hello - -This is my **first Docusaurus document**! -``` - -A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello). - -## Configure the Sidebar - -Docusaurus automatically **creates a sidebar** from the `docs` folder. - -Add metadata to customize the sidebar label and position: - -```md title="docs/hello.md" {1-4} ---- -sidebar_label: 'Hi!' -sidebar_position: 3 ---- - -# Hello - -This is my **first Docusaurus document**! -``` - -It is also possible to create your sidebar explicitly in `sidebars.js`: - -```js title="sidebars.js" -export default { - tutorialSidebar: [ - 'intro', - // highlight-next-line - 'hello', - { - type: 'category', - label: 'Tutorial', - items: ['tutorial-basics/create-a-document'], - }, - ], -}; -``` diff --git a/docs/tutorial-basics/create-a-page.md b/docs/tutorial-basics/create-a-page.md deleted file mode 100644 index 20e2ac3..0000000 --- a/docs/tutorial-basics/create-a-page.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Create a Page - -Add **Markdown or React** files to `src/pages` to create a **standalone page**: - -- `src/pages/index.js` → `localhost:3000/` -- `src/pages/foo.md` → `localhost:3000/foo` -- `src/pages/foo/bar.js` → `localhost:3000/foo/bar` - -## Create your first React Page - -Create a file at `src/pages/my-react-page.js`: - -```jsx title="src/pages/my-react-page.js" -import React from 'react'; -import Layout from '@theme/Layout'; - -export default function MyReactPage() { - return ( - -

My React page

-

This is a React page

-
- ); -} -``` - -A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page). - -## Create your first Markdown Page - -Create a file at `src/pages/my-markdown-page.md`: - -```mdx title="src/pages/my-markdown-page.md" -# My Markdown page - -This is a Markdown page -``` - -A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page). diff --git a/docs/tutorial-basics/deploy-your-site.md b/docs/tutorial-basics/deploy-your-site.md deleted file mode 100644 index 1c50ee0..0000000 --- a/docs/tutorial-basics/deploy-your-site.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Deploy your site - -Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**). - -It builds your site as simple **static HTML, JavaScript and CSS files**. - -## Build your site - -Build your site **for production**: - -```bash -npm run build -``` - -The static files are generated in the `build` folder. - -## Deploy your site - -Test your production build locally: - -```bash -npm run serve -``` - -The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/). - -You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**). diff --git a/docs/tutorial-basics/markdown-features.mdx b/docs/tutorial-basics/markdown-features.mdx deleted file mode 100644 index 35e0082..0000000 --- a/docs/tutorial-basics/markdown-features.mdx +++ /dev/null @@ -1,152 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Markdown Features - -Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**. - -## Front Matter - -Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/): - -```text title="my-doc.md" -// highlight-start ---- -id: my-doc-id -title: My document title -description: My document description -slug: /my-custom-url ---- -// highlight-end - -## Markdown heading - -Markdown text with [links](./hello.md) -``` - -## Links - -Regular Markdown links are supported, using url paths or relative file paths. - -```md -Let's see how to [Create a page](/create-a-page). -``` - -```md -Let's see how to [Create a page](./create-a-page.md). -``` - -**Result:** Let's see how to [Create a page](./create-a-page.md). - -## Images - -Regular Markdown images are supported. - -You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`): - -```md -![Docusaurus logo](/img/docusaurus.png) -``` - -![Docusaurus logo](/img/docusaurus.png) - -You can reference images relative to the current file as well. This is particularly useful to colocate images close to the Markdown files using them: - -```md -![Docusaurus logo](./img/docusaurus.png) -``` - -## Code Blocks - -Markdown code blocks are supported with Syntax highlighting. - -````md -```jsx title="src/components/HelloDocusaurus.js" -function HelloDocusaurus() { - return

Hello, Docusaurus!

; -} -``` -```` - -```jsx title="src/components/HelloDocusaurus.js" -function HelloDocusaurus() { - return

Hello, Docusaurus!

; -} -``` - -## Admonitions - -Docusaurus has a special syntax to create admonitions and callouts: - -```md -:::tip My tip - -Use this awesome feature option - -::: - -:::danger Take care - -This action is dangerous - -::: -``` - -:::tip My tip - -Use this awesome feature option - -::: - -:::danger Take care - -This action is dangerous - -::: - -## MDX and React Components - -[MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**: - -```jsx -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`) - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! -``` - -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`); - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! diff --git a/docs/typescript/01-intro.md b/docs/typescript/01-intro.md new file mode 100644 index 0000000..c50d99b --- /dev/null +++ b/docs/typescript/01-intro.md @@ -0,0 +1,60 @@ +--- +sidebar_position: 1 +--- + +# Зачем нужен TS + +TypeScript — это язык программирования, который расширяет JavaScript, добавляя статическую типизацию и другие возможности. + +Вот основные причины, зачем он нужен: + +1. **Статическая типизация:** + - TypeScript позволяет определять типы переменных, параметров функций и возвращаемых значений. Это помогает находить ошибки на этапе разработки, а не во время выполнения кода. + - Например, если вы случайно передадите строку вместо числа, TypeScript выдаст ошибку. + +2. **Улучшение читаемости и поддержки кода:** + - Типы делают код более понятным и самодокументируемым. Легче понять, какие данные ожидаются и возвращаются в функциях. + - Это особенно полезно в больших проектах или при работе в команде. + +3. **Инструменты разработки:** + - TypeScript интегрируется с современными IDE (например, Visual Studio Code), предоставляя автодополнение, навигацию по коду и подсказки на основе типов. + - Это ускоряет разработку и уменьшает количество ошибок. + +4. **Совместимость с JavaScript:** + - TypeScript — это надмножество JavaScript, поэтому любой валидный JS-код является валидным TypeScript-кодом. + - Вы можете постепенно внедрять TypeScript в существующие проекты. + +5. **Поддержка современных возможностей:** + - TypeScript поддерживает современные функции ES6+ (например, классы, модули, стрелочные функции), даже если целевая среда выполнения (например, старые браузеры) их не поддерживает. TypeScript компилирует их в совместимый код. + +6. **Повышение надежности:** + - Статическая типизация и проверка типов снижают вероятность ошибок, связанных с неправильным использованием данных. + - Это особенно важно в больших и сложных приложениях. + +7. **Поддержка ООП:** + - TypeScript предоставляет более мощные инструменты для объектно-ориентированного программирования, такие как интерфейсы, абстрактные классы, модификаторы доступа (`public`, `private`, `protected`). + +8. **Экосистема и сообщество:** + - TypeScript активно развивается и поддерживается Microsoft. Он широко используется в индустрии, особенно в крупных проектах (например, Angular, React, Node.js). + +TypeScript помогает писать более надежный, читаемый и поддерживаемый код, особенно в больших проектах. Он сочетает гибкость JavaScript с преимуществами статической типизации. + +TypeScript также включает в себя транспилятор, который преобразует TypeScript-код в JavaScript. + +Как работает TypeScript: + +1. **Проверка типов:** + - TypeScript сначала проверяет типы в коде. Если есть ошибки (например, передача строки вместо числа), компилятор выдаст ошибку. +2. **Транспиляция:** + - После проверки типов TypeScript преобразует TypeScript-код в JavaScript. При этом он удаляет все типы и аннотации, так как они не нужны в рантайме. +3. **Генерация кода:** + - TypeScript генерирует JavaScript-код, который может быть выполнен в любой среде, поддерживающей JavaScript. + +### Babel и TypeScript вместе +Babel и TypeScript могут использоваться вместе. Например: + +1. **TypeScript для проверки типов:** + - TypeScript используется только для проверки типов, а транспиляцию выполняет Babel. + - Это позволяет использовать все возможности Babel (например, экспериментальные функции JavaScript). +2. **Babel для транспиляции:** + - Babel может транспилировать TypeScript-код с помощью плагина `@babel/preset-typescripts`. Этот плагин удаляет типы и преобразует код в JavaScript. \ No newline at end of file diff --git a/docs/typescript/02-types-vs-interface.md b/docs/typescript/02-types-vs-interface.md new file mode 100644 index 0000000..fb36abd --- /dev/null +++ b/docs/typescript/02-types-vs-interface.md @@ -0,0 +1,157 @@ +--- +sidebar_position: 2 +--- + +# Отличие types от interface + +В TypeScript и **type**, и **interface** используются для определения типов данных, но они имеют некоторые различия в синтаксисе, возможностях и использовании. + +### 1. Синтаксис +**`type:`** +Используется ключевое слово type для создания псевдонимов типов. +```ts +type User = { + name: string; + age: number; +}; +``` +**`interface:`** +Используется ключевое слово interface. +```ts +interface User { + name: string; + age: number; +} +``` + +### 2. Расширение +**`type:`** +Для расширения типов используется оператор & (intersection). +```ts +type Person = { + name: string; +}; + +type User = Person & { + age: number; +}; +``` +**`interface:`** +Для расширения интерфейсов используется ключевое слово extends. +```ts +interface Person { + name: string; +} + +interface User extends Person { + age: number; +} +``` + +### 3. Объединение типов +**`type:`** +Может создавать объединения (union) и пересечения (intersection) типов. +```ts +type ID = string | number; // Union type +type Combined = TypeA & TypeB; // Intersection type +``` +**`interface:`** +Не поддерживает объединения или пересечения напрямую. Однако можно расширять интерфейсы, чтобы достичь похожего результата. +```ts +interface A { + propA: string; +} + +interface B { + propB: number; +} + +interface Combined extends A, B {} +``` + +### 4. Примитивные типы и сложные конструкции +**`type:`** +Может использоваться для определения примитивных типов, union-типов, кортежей и других сложных конструкций. +```ts +type StringOrNumber = string | number; +type Tuple = [string, number]; +``` +**`interface:`** +Используется только для описания объектов. Не может использоваться для примитивов, union-типов или кортежей. +```ts +// Так нельзя: +interface StringOrNumber = string | number; // Ошибка +``` + +### 5. Декларативное слияние +**`type:`** +Не поддерживает слияние. Если вы определите два типа с одинаковым именем, это вызовет ошибку. +```ts +type User = { name: string }; +type User = { age: number }; // Ошибка: Дубликат идентификатора 'User' +``` +**`interface:`** +Поддерживает слияние. Если вы определите два интерфейса с одинаковым именем, они объединятся. +```ts +interface User { + name: string; +} + +interface User { + age: number; +} + +const user: User = { + name: "John", + age: 30, +}; +``` + +### 6. Использование с классами +**`type:`** +Не может быть реализован классом напрямую. +```ts +type Person = { + name: string; +}; + +class User implements Person { // Ошибка: Нельзя использовать type для реализации + name: string; +} +``` +**`interface:`** +Может быть реализован классом. +```ts +interface Person { + name: string; +} + +class User implements Person { + name: string; +} +``` + +### 7. Производительность +**`type:`** +Может быть менее производительным при работе с большими и сложными типами, так как TypeScript каждый раз вычисляет их. + +**`interface:`** +Обычно работает быстрее, так как интерфейсы кэшируются и оптимизируются компилятором. + +## Когда использовать type, а когда interface? + +- **Используйте `type`, если:** + - Нужно создать union-тип, intersection-тип или кортеж. + - Работаете с примитивными типами. + - Нужна гибкость в определении сложных типов. + +- **Используйте `interface`, если:** + - Работаете с объектами и классами. + - Нужно использовать декларативное слияние. + - Хотите, чтобы код был более читаемым и понятным для других разработчиков (интерфейсы часто ассоциируются с ООП). + +## Итог +- `type` и `interface` во многом похожи, но имеют свои уникальные особенности. +- `type` более гибок и подходит для сложных типов. +- `interface` лучше подходит для объектов и классов, а также поддерживает слияние. +- В большинстве случаев выбор между ними зависит от предпочтений разработчика и конкретной задачи. \ No newline at end of file diff --git a/docs/typescript/03-utility-types.md b/docs/typescript/03-utility-types.md new file mode 100644 index 0000000..b9f663a --- /dev/null +++ b/docs/typescript/03-utility-types.md @@ -0,0 +1,222 @@ +--- +sidebar_position: 3 +--- + +# Utility types +**Utility Types** в TypeScript — это встроенные generic-типы, которые предоставляют удобные способы для преобразования или манипуляции существующими типами. Они упрощают работу с типами, позволяя создавать новые типы на основе существующих без необходимости писать сложные конструкции вручную. + +Utility Types часто используются для создания производных типов, таких как частичные объекты, обязательные поля, исключение полей и т.д. Они особенно полезны в больших проектах, где требуется гибкость и повторное использование типов. + +## Список популярных Utility Types + +### 1. Partial\ +Создает тип, в котором все свойства **`T`** становятся необязательными. + +```ts +interface User { + name: string; + age: number; +} + +type PartialUser = Partial; +// { name?: string; age?: number; } +``` + +### 2. Required\ +Создает тип, в котором все свойства **`T`** становятся обязательными. + +```ts +interface User { + name?: string; + age?: number; +} + +type RequiredUser = Required; +// { name: string; age: number; } +``` + +### 3. Readonly\ +Создает тип, в котором все свойства **`T`** доступны только для чтения. +```ts +interface User { + name: string; + age: number; +} + +type ReadonlyUser = Readonly; +// { readonly name: string; readonly age: number; } +``` + +### 4. Record\ +Создает тип, представляющий объект, где ключи имеют тип **`K`**, а значения — тип **`T`**. +```ts +type UserRoles = Record; +// { [key: string]: string } + +const roles: UserRoles = { + admin: "Admin", + user: "User", +}; +``` + +### 5. Pick\ +Создает тип, выбирая только указанные свойства **`K`** из типа **`T`**. +```ts +interface User { + name: string; + age: number; + email: string; +} + +type UserNameAndAge = Pick; +// { name: string; age: number; } +``` + +### 6. Omit\ +Создает тип, исключая указанные свойства **`K`** из типа **`T`**. +```ts +interface User { + name: string; + age: number; + email: string; +} + +type UserWithoutEmail = Omit; +// { name: string; age: number; } +``` + +### 7. Exclude\ +Исключает из типа **`T`** все типы, которые можно присвоить **`U`**. +```ts +type T = string | number | boolean; +type StringOrNumber = Exclude; +// string | number +``` + +### 8. Extract\ +Извлекает из типа **`T`** только те типы, которые можно присвоить **`U`**. +```ts +type T = string | number | boolean; +type OnlyBoolean = Extract; +// boolean +``` + +### 9. NonNullable\ +Удаляет `null` и `undefined` из типа **`T`**. +```ts +type T = string | number | null | undefined; +type NonNullableT = NonNullable; +// string | number +``` + +### 10. ReturnType\ +Создает тип, представляющий тип возвращаемого значения функции **`T`**. +```ts +function getUser() { + return { name: "John", age: 30 }; +} + +type UserReturnType = ReturnType; +// { name: string; age: number; } +``` + +### 11. Parameters\ +Создает тип, представляющий кортеж параметров функции **`T`**. +```ts +function add(a: number, b: number) { + return a + b; +} + +type AddParams = Parameters; +// [a: number, b: number] +``` + +### 12. ConstructorParameters\ +Создает тип, представляющий кортеж параметров конструктора класса **`T`**. +```ts +class User { + constructor(public name: string, public age: number) {} +} + +type UserConstructorParams = ConstructorParameters; +// [name: string, age: number] +``` + +### 13. InstanceType\ +Создает тип, представляющий тип экземпляра класса **`T`**. +```ts +class User { + name: string; + age: number; +} + +type UserInstance = InstanceType; +// User +``` + +### 14. ThisParameterType\ +Извлекает тип параметра **`this`** из функции **`T`**. +```ts +function greet(this: { name: string }) { + console.log(`Hello, ${this.name}`); +} + +type GreetThisType = ThisParameterType; +// { name: string } +``` + +### 15. OmitThisParameter\ +Создает тип функции, удаляя параметр **`this`**. +```ts +function greet(this: { name: string }) { + console.log(`Hello, ${this.name}`); +} + +type GreetWithoutThis = OmitThisParameter; +// () => void +``` + + +## Примеры использования Utility Types +#### Пример 1: Создание частичного объекта +```ts +interface User { + name: string; + age: number; + email: string; +} + +type PartialUser = Partial; +// { name?: string; age?: number; email?: string; } +``` +#### Пример 2: Выбор конкретных свойств +```ts +interface User { + name: string; + age: number; + email: string; +} + +type UserNameAndEmail = Pick; +// { name: string; email: string; } +``` +#### Пример 3: Исключение свойств +```ts +interface User { + name: string; + age: number; + email: string; +} + +type UserWithoutEmail = Omit; +// { name: string; age: number; } +``` + +## Итог +**Utility Types** в TypeScript — это мощный инструмент для работы с типами. Они позволяют: + +- Упрощать создание новых типов на основе существующих. +- Уменьшать дублирование кода. +- Повышать читаемость и поддерживаемость кода. + +Использование **Utility Types** делает TypeScript более гибким и выразительным, особенно в больших проектах. \ No newline at end of file diff --git a/docs/typescript/04-generic-types.md b/docs/typescript/04-generic-types.md new file mode 100644 index 0000000..edcaab9 --- /dev/null +++ b/docs/typescript/04-generic-types.md @@ -0,0 +1,86 @@ +--- +sidebar_position: 4 +--- + +# Generic types + +**Generics (обобщения)** в TypeScript — это механизм, который позволяет создавать универсальные, переиспользуемые компоненты (функции, классы, интерфейсы), которые могут работать с разными типами данных, сохраняя при этом безопасность типов. + +## Зачем нужны Generics? +- **Повторное использование кода:** Generics позволяют писать универсальные функции и классы, которые могут работать с любыми типами. +- **Безопасность типов:** Generics сохраняют информацию о типах, что помогает избежать ошибок на этапе компиляции. +- **Гибкость:** Generics позволяют создавать компоненты, которые могут адаптироваться к разным типам данных. + +## Примеры использования Generics + +### 1. Функции с Generics +```ts +function identity(arg: T): T { + return arg; +} + +let output1 = identity("Hello"); // Тип: string +let output2 = identity(42); // Тип: number +``` +**`T`** — это обобщенный тип (type parameter), который заменяется на конкретный тип при вызове функции. + +### 2. Классы с Generics +```ts +class Box { + private value: T; + + constructor(value: T) { + this.value = value; + } + + getValue(): T { + return this.value; + } +} + +let box1 = new Box("Hello"); +let box2 = new Box(42); +``` +Класс **`Box`** может работать с любым типом данных, переданным в **`T`**. + +### 3. Интерфейсы с Generics +```ts +interface Pair { + first: T; + second: U; +} + +let pair: Pair = { first: "Age", second: 30 }; +``` +Интерфейс **`Pair`** может работать с двумя разными типами (**`T`** и **`U`**). + +### 4. Ограничения Generics (Constraints) +Иногда нужно ограничить типы, которые можно передать в Generics. Для этого используется ключевое слово **`extends`**. +```ts +interface Lengthwise { + length: number; +} + +function logLength(arg: T): void { + console.log(arg.length); +} + +logLength("Hello"); // ОК, у строки есть свойство length +logLength([1, 2, 3]); // ОК, у массива есть свойство length +logLength(42); // Ошибка: у числа нет свойства length +``` + +### 5. Generics по умолчанию +Можно указать тип по умолчанию для Generics, если тип не был передан явно. +```ts +function createArray(length: number, value: T): T[] { + return Array(length).fill(value); +} + +let strings = createArray(3, "x"); // string[] +let numbers = createArray(3, 42); // number[] +``` +## Преимущества Generics +- **Универсальность:** Generics позволяют писать код, который работает с разными типами. +- **Безопасность типов:** TypeScript проверяет типы на этапе компиляции, что помогает избежать ошибок. +- **Читаемость:** Generics делают код более выразительным и понятным. diff --git a/docs/typescript/05-type-guards.md b/docs/typescript/05-type-guards.md new file mode 100644 index 0000000..e63a8e1 --- /dev/null +++ b/docs/typescript/05-type-guards.md @@ -0,0 +1,113 @@ +--- +sidebar_position: 5 +--- + +# Type guards +**Type Guards (защитники типов)** в TypeScript — это механизм, который позволяет сужать тип переменной внутри блока кода на основе проверки условий. Это помогает TypeScript лучше понимать, с каким типом данных он работает, и обеспечивает безопасность типов. + +## Зачем нужны Type Guards? +- **Сужение типов:** TypeScript может автоматически определять тип переменной внутри блока кода после проверки. +- **Безопасность типов:** Type Guards помогают избежать ошибок, связанных с неправильным использованием типов. +- **Улучшение читаемости:** Код становится более понятным, так как явно указываются условия для работы с разными типами. + +## Основные виды Type Guards + +### 1. `typeof` +Проверяет тип примитивных значений (string, number, boolean, symbol, undefined, object, function). +```ts +function printValue(value: string | number) { + if (typeof value === "string") { + console.log(value.toUpperCase()); // Тип value: string + } else { + console.log(value.toFixed(2)); // Тип value: number + } +} +``` + +### 2. `instanceof` +Проверяет, является ли объект экземпляром определенного класса. + +```ts +class Dog { + bark() { + console.log("Woof!"); + } +} + +class Cat { + meow() { + console.log("Meow!"); + } +} + +function makeSound(animal: Dog | Cat) { + if (animal instanceof Dog) { + animal.bark(); // Тип animal: Dog + } else { + animal.meow(); // Тип animal: Cat + } +} +``` + +### 3. Проверка на `null` или `undefined` +Позволяет исключить `null` или `undefined` из типа. +```ts +function printLength(value: string | null) { + if (value !== null) { + console.log(value.length); // Тип value: string + } +} +``` + +### 4. Пользовательские Type Guards +Функции, которые возвращают **`boolean`** и помогают TypeScript сузить тип. +```ts +interface Bird { + fly(): void; +} + +interface Fish { + swim(): void; +} + +function isFish(pet: Bird | Fish): pet is Fish { + return (pet as Fish).swim !== undefined; +} + +function move(pet: Bird | Fish) { + if (isFish(pet)) { + pet.swim(); // Тип pet: Fish + } else { + pet.fly(); // Тип pet: Bird + } +} +``` +Обратите внимание на синтаксис **`pet is Fish`**. Это указывает TypeScript, что если функция возвращает **`true`**, то **`pet`** имеет тип **`Fish`**. + +### 5. Проверка свойств объекта +Позволяет сузить тип на основе наличия определенного свойства. +```ts +interface Car { + drive(): void; +} + +interface Boat { + sail(): void; +} + +function move(vehicle: Car | Boat) { + if ("drive" in vehicle) { + vehicle.drive(); // Тип vehicle: Car + } else { + vehicle.sail(); // Тип vehicle: Boat + } +} +``` + +## Итог +**Type Guards** — это мощный инструмент TypeScript для работы с типами. Они позволяют: +- Сужать типы на основе условий. +- Повышать безопасность кода. +- Делать код более читаемым и выразительным. + +Используйте **Type Guards**, чтобы TypeScript лучше понимал ваши намерения и помогал избегать ошибок. \ No newline at end of file diff --git a/docs/typescript/06-enums-vs-as-const.md b/docs/typescript/06-enums-vs-as-const.md new file mode 100644 index 0000000..ea56092 --- /dev/null +++ b/docs/typescript/06-enums-vs-as-const.md @@ -0,0 +1,97 @@ +--- +sidebar_position: 6 +--- + +# Enums и as const +**Enum (перечисления)** в TypeScript — это способ определения набора именованных констант. Enums полезны, когда нужно работать с набором связанных значений, которые имеют смысл только в контексте друг друга. + +## Пример Enum +```ts +enum Direction { + Up = "UP", + Down = "DOWN", + Left = "LEFT", + Right = "RIGHT", +} + +let move: Direction = Direction.Up; +console.log(move); // "UP" +``` + +## Особенности Enum + +### 1. Числовые Enums: +Если значения не указаны явно, TypeScript автоматически присваивает числа, начиная с 0. +```ts +enum Status { + Pending, // 0 + Approved, // 1 + Rejected, // 2 +} +``` + +### 2. Строковые Enums: +Каждое значение должно быть явно указано. +```ts +enum Direction { + Up = "UP", + Down = "DOWN", +} +``` + +### 3. Гетерогенные Enums: +Можно смешивать строковые и числовые значения (но это не рекомендуется). +```ts +enum Mixed { + Yes = 1, + No = "NO", +} +``` + +## Проблемы с Enum +- **Генерируют дополнительный код:** Enums компилируются в JavaScript-объекты, что может увеличить размер кода. +- **Не всегда интуитивно понятны:** Например, числовые Enums могут быть неочевидными. +- **Сложности с деревомизацией (tree-shaking):** Enums могут мешать оптимизации кода при сборке. + +### Замена Enum с помощью `as const` +В TypeScript можно использовать объекты с **`as const`**, чтобы создать тип, аналогичный **Enum**, но без его недостатков. + +```ts +const Direction = { + Up: "UP", + Down: "DOWN", + Left: "LEFT", + Right: "RIGHT", +} as const; + +type Direction = typeof Direction[keyof typeof Direction]; + +let move: Direction = Direction.Up; +console.log(move); // "UP" +``` + +### Преимущества `as const`: +- **Без дополнительного кода:** **`as const`** не генерирует дополнительный код в JavaScript. +- **Иммутабельность:** Значения становятся read-only. +- **Деревоизация:** Легче оптимизировать при сборке. +- **Гибкость:** Можно использовать строки, числа и другие типы. + +### Пример с числовыми значениями: +```ts +const Status = { + Pending: 0, + Approved: 1, + Rejected: 2, +} as const; + +type Status = typeof Status[keyof typeof Status]; + +let currentStatus: Status = Status.Approved; +console.log(currentStatus); // 1 +``` + +## Итог +- **Enum** — это классический способ определения набора констант, но он имеет недостатки. +- **`as const`** — это современная альтернатива, которая более гибкая и эффективная. + +Используйте **`as const`**, если хотите избежать недостатков Enum и сделать код более легковесным и оптимизированным. \ No newline at end of file diff --git a/docs/typescript/_category_.json b/docs/typescript/_category_.json new file mode 100644 index 0000000..1b8ca9a --- /dev/null +++ b/docs/typescript/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Typescript", + "position": 4, + "link": { + "type": "generated-index" + } +}