update typescript, update docs

This commit is contained in:
2025-03-25 12:56:44 +03:00
parent 3ca85754d2
commit f26d9d8512
61 changed files with 467 additions and 80 deletions

View File

@@ -57,4 +57,6 @@ Babel и TypeScript могут использоваться вместе. Нап
- TypeScript используется только для проверки типов, а транспиляцию выполняет Babel.
- Это позволяет использовать все возможности Babel (например, экспериментальные функции JavaScript).
2. **Babel для транспиляции:**
- Babel может транспилировать TypeScript-код с помощью плагина `@babel/preset-typescripts`. Этот плагин удаляет типы и преобразует код в JavaScript.
- Babel может транспилировать TypeScript-код с помощью плагина `@babel/preset-typescripts`. Этот плагин удаляет типы и преобразует код в JavaScript.
🚀 **_Источник: DeepSeek_**

View File

@@ -132,4 +132,6 @@ TypeScript предоставляет богатую систему типов,
- Объектные типы (массивы, кортежи, функции, классы).
- Продвинутые типы (интерфейсы, объединения, пересечения, дженерики).
Эти типы помогают писать более безопасный и поддерживаемый код, а также улучшают инструменты разработки, такие как автодополнение и проверка ошибок.
Эти типы помогают писать более безопасный и поддерживаемый код, а также улучшают инструменты разработки, такие как автодополнение и проверка ошибок.
🚀 **_Источник: DeepSeek_**

View File

@@ -154,4 +154,6 @@ class User implements Person {
- `type` и `interface` во многом похожи, но имеют свои уникальные особенности.
- `type` более гибок и подходит для сложных типов.
- `interface` лучше подходит для объектов и классов, а также поддерживает слияние.
- В большинстве случаев выбор между ними зависит от предпочтений разработчика и конкретной задачи.
- В большинстве случаев выбор между ними зависит от предпочтений разработчика и конкретной задачи.
🚀 **_Источник: DeepSeek_**

View File

@@ -219,4 +219,6 @@ type UserWithoutEmail = Omit<User, "email">;
- Уменьшать дублирование кода.
- Повышать читаемость и поддерживаемость кода.
Использование **Utility Types** делает TypeScript более гибким и выразительным, особенно в больших проектах.
Использование **Utility Types** делает TypeScript более гибким и выразительным, особенно в больших проектах.
🚀 **_Источник: DeepSeek_**

View File

@@ -84,3 +84,5 @@ let numbers = createArray<number>(3, 42); // number[]
- **Универсальность:** Generics позволяют писать код, который работает с разными типами.
- **Безопасность типов:** TypeScript проверяет типы на этапе компиляции, что помогает избежать ошибок.
- **Читаемость:** Generics делают код более выразительным и понятным.
🚀 **_Источник: DeepSeek_**

View File

@@ -3,6 +3,7 @@ sidebar_position: 6
---
# Type guards
**Type Guards (защитники типов)** в TypeScript — это механизм, который позволяет сужать тип переменной внутри блока кода на основе проверки условий. Это помогает TypeScript лучше понимать, с каким типом данных он работает, и обеспечивает безопасность типов.
## Зачем нужны Type Guards?
@@ -110,4 +111,6 @@ function move(vehicle: Car | Boat) {
- Повышать безопасность кода.
- Делать код более читаемым и выразительным.
Используйте **Type Guards**, чтобы TypeScript лучше понимал ваши намерения и помогал избегать ошибок.
Используйте **Type Guards**, чтобы TypeScript лучше понимал ваши намерения и помогал избегать ошибок.
🚀 **_Источник: DeepSeek_**

View File

@@ -94,4 +94,6 @@ console.log(currentStatus); // 1
- **Enum** — это классический способ определения набора констант, но он имеет недостатки.
- **`as const`** — это современная альтернатива, которая более гибкая и эффективная.
Используйте **`as const`**, если хотите избежать недостатков Enum и сделать код более легковесным и оптимизированным.
Используйте **`as const`**, если хотите избежать недостатков Enum и сделать код более легковесным и оптимизированным.
🚀 **_Источник: DeepSeek_**

View File

@@ -0,0 +1,33 @@
---
sidebar_position: 8
---
# Namespaces
В TypeScript **namespace** (пространство имён) — это способ группировки логически связанных объектов, функций и интерфейсов. Они помогают избежать конфликтов имён в больших кодовых базах, инкапсулируя объявления внутри единого блока.
Основные особенности:
- Определяются с помощью ключевого слова `namespace`.
- Внутри можно объявлять переменные, функции, интерфейсы, классы и другие элементы.
- Для экспорта элементов используется `export`, иначе они остаются приватными.
- Для доступа к элементам снаружи используется `namespaceName.elementName`.
```ts
namespace MyNamespace {
export class Person {
constructor(public name: string) {}
greet() {
return `Hello, ${this.name}!`;
}
}
}
// Использование
const user = new MyNamespace.Person("Alice");
console.log(user.greet()); // Hello, Alice!
```
**Важно: В современных проектах вместо `namespace` чаще используют модули (ES6 modules), так как они поддерживаются нативно и лучше интегрируются с инструментами сборки.**
🚀 **_Источник: ChatGPT_**

View File

@@ -0,0 +1,89 @@
---
sidebar_position: 9
---
# Декораторы
Декораторы — это специальный вид функций, которые позволяют изменять или дополнять поведение классов, их методов, свойств и параметров. Они используются для метапрограммирования и широко применяются, например, в Angular.
Особенности:
- Включаются флагом experimentalDecorators в tsconfig.json.
- Представляют собой функции, принимающие конструктор или описание метода/свойства.
- Применяются с @ перед именем.
Типы декораторов:
1. Класс (@ClassDecorator)
2. Метод (@MethodDecorator)
3. Свойство (@PropertyDecorator)
4. Аксессор (@AccessorDecorator)
5. Параметр (@ParameterDecorator)
## Примеры использования
1. **Декоратор класса** - Добавляет новое свойство или изменяет поведение класса.
```ts
function WithTimestamp(constructor: Function) {
constructor.prototype.timestamp = new Date();
}
@WithTimestamp
class MyClass {}
const obj = new MyClass();
console.log((obj as any).timestamp); // Выведет текущую дату
```
2. **Декоратор метода** - Логирует вызов метода.
```ts
function Log(target: any, methodName: string, descriptor: PropertyDescriptor) {
const original = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Вызван метод: ${methodName}, аргументы: ${args}`);
return original.apply(this, args);
};
}
class MyClass {
@Log
sayHello(name: string) {
console.log(`Привет, ${name}!`);
}
}
new MyClass().sayHello("Алиса");
// В консоли:
// Вызван метод: sayHello, аргументы: Алиса
// Привет, Алиса!
```
3. **Декоратор свойства** - Изменяет значение свойства при создании объекта.
```ts
function DefaultValue(value: any) {
return function (target: any, propertyKey: string) {
let _val = value;
Object.defineProperty(target, propertyKey, {
get: () => _val,
set: (newVal) => _val = newVal,
enumerable: true,
configurable: true
});
};
}
class User {
@DefaultValue("Гость")
name: string;
}
const user = new User();
console.log(user.name); // "Гость"
```
## Итог
- Декораторы позволяют изменять классы и их члены.
- Их часто используют **в фреймворках (например, Angular)**.
- Требуют включения `experimentalDecorators`.
- Альтернативой являются **метапрограммирование и DI (dependency injection)**.
❗ Важно: В JavaScript декораторы пока находятся в стадии разработки (TC39 Stage 3).
🚀 **_Источник: ChatGPT_**