update typescript, update docs
This commit is contained in:
@@ -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_**
|
||||
@@ -132,4 +132,6 @@ TypeScript предоставляет богатую систему типов,
|
||||
- Объектные типы (массивы, кортежи, функции, классы).
|
||||
- Продвинутые типы (интерфейсы, объединения, пересечения, дженерики).
|
||||
|
||||
Эти типы помогают писать более безопасный и поддерживаемый код, а также улучшают инструменты разработки, такие как автодополнение и проверка ошибок.
|
||||
Эти типы помогают писать более безопасный и поддерживаемый код, а также улучшают инструменты разработки, такие как автодополнение и проверка ошибок.
|
||||
|
||||
🚀 **_Источник: DeepSeek_**
|
||||
@@ -154,4 +154,6 @@ class User implements Person {
|
||||
- `type` и `interface` во многом похожи, но имеют свои уникальные особенности.
|
||||
- `type` более гибок и подходит для сложных типов.
|
||||
- `interface` лучше подходит для объектов и классов, а также поддерживает слияние.
|
||||
- В большинстве случаев выбор между ними зависит от предпочтений разработчика и конкретной задачи.
|
||||
- В большинстве случаев выбор между ними зависит от предпочтений разработчика и конкретной задачи.
|
||||
|
||||
🚀 **_Источник: DeepSeek_**
|
||||
@@ -219,4 +219,6 @@ type UserWithoutEmail = Omit<User, "email">;
|
||||
- Уменьшать дублирование кода.
|
||||
- Повышать читаемость и поддерживаемость кода.
|
||||
|
||||
Использование **Utility Types** делает TypeScript более гибким и выразительным, особенно в больших проектах.
|
||||
Использование **Utility Types** делает TypeScript более гибким и выразительным, особенно в больших проектах.
|
||||
|
||||
🚀 **_Источник: DeepSeek_**
|
||||
@@ -84,3 +84,5 @@ let numbers = createArray<number>(3, 42); // number[]
|
||||
- **Универсальность:** Generics позволяют писать код, который работает с разными типами.
|
||||
- **Безопасность типов:** TypeScript проверяет типы на этапе компиляции, что помогает избежать ошибок.
|
||||
- **Читаемость:** Generics делают код более выразительным и понятным.
|
||||
|
||||
🚀 **_Источник: DeepSeek_**
|
||||
@@ -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_**
|
||||
@@ -94,4 +94,6 @@ console.log(currentStatus); // 1
|
||||
- **Enum** — это классический способ определения набора констант, но он имеет недостатки.
|
||||
- **`as const`** — это современная альтернатива, которая более гибкая и эффективная.
|
||||
|
||||
Используйте **`as const`**, если хотите избежать недостатков Enum и сделать код более легковесным и оптимизированным.
|
||||
Используйте **`as const`**, если хотите избежать недостатков Enum и сделать код более легковесным и оптимизированным.
|
||||
|
||||
🚀 **_Источник: DeepSeek_**
|
||||
33
docs/typescript/08-namespaces.md
Normal file
33
docs/typescript/08-namespaces.md
Normal 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_**
|
||||
89
docs/typescript/09-decorators.md
Normal file
89
docs/typescript/09-decorators.md
Normal 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_**
|
||||
Reference in New Issue
Block a user