TypeScript: Зачем нужно Promise? 🤔

В TypeScript запись Promise означает, что функция возвращает объект Promise, который разрешится (resolve) в значение текущего объекта (того же типа, что и this). Это обеспечивает более точную проверку типов и автодополнение кода, когда результат промиса напрямую связан с типом объекта.

Простой пример: 🧪

class MyClass { someProperty: string = "hello";

// Функция возвращает Promise, который разрешится В ЭТОТ ЖЕ объект (this) myAsyncFunction(): Promise { return new Promise((resolve) => { setTimeout(() => { resolve(this); // Отдаем текущий экземпляр класса при разрешении }, 1000); }); } }

const instance = new MyClass();

instance.myAsyncFunction().then((resolvedValue) => { // resolvedValue имеет тип MyClass - это безопасно! console.log(resolvedValue.someProperty); // "hello" - IDE подскажет свойство });

Ключевые моменты: 🔑

Promise: Промис разрешится в значение того же типа, что и текущий экземпляр класса (this внутри метода).

resolve(this): Внутри промиса передаем сам объект (this).

Тип resolvedValue: В обработчике .then значение resolvedValue будет иметь тип экземпляра класса (MyClass в примере). TypeScript это гарантирует.

Зачем это нужно? 💡

🚀 Типобезопасность: TypeScript строго проверит, что вы работаете с правильным типом объекта после разрешения промиса. Никаких неожиданных undefined!

🚀 Автодополнение (IntelliSense): Ваша IDE (VSCode и др.) будет точно знать тип разрешенного значения и подскажет все свойства и методы объекта (someProperty в примере).

🚀 Ясность кода: Прямо указывает, что промис вернет тот же самый объект (или объект того же типа) после асинхронной операции. Код становится самодокументируемым.

Когда использовать Promise? ⏱️

Когда асинхронный метод должен вернуть текущий объект (или объект этого же класса) после выполнения операции (например, инициализации, загрузки данных для объекта, цепочки асинхронных действий).

Когда вам критически важна типизация объекта в цепочке .then() и вы хотите максимум поддержки от TypeScript и IDE.

#typescript