TypeScript – популярный язык программирования, расширяющий JavaScript за счет добавления к нему статической типизации. Одной из мощных функций TypeScript являются генераторы, которые позволяют определять итераторы лаконично и гибко. В этой статье мы рассмотрим различные методы использования генераторов в TypeScript, а также приведем примеры кода.
- Создание базового генератора:
Самый простой способ создать функцию-генератор в TypeScript — использовать синтаксис function*. Вот пример:
function* basicGenerator() {
yield 'Hello';
yield 'World';
}
const gen = basicGenerator();
console.log(gen.next()); // { value: 'Hello', done: false }
console.log(gen.next()); // { value: 'World', done: false }
console.log(gen.next()); // { value: undefined, done: true }
- Передача значений в генератор:
Генераторы могут получать значения извне с помощью оператора yield. Вот пример:
function* valueGenerator() {
const value = yield;
console.log(value);
}
const gen = valueGenerator();
gen.next();
gen.next('Hello, World!'); // Output: Hello, World!
- Делегирование генератора:
Генераторы можно создавать с помощью оператора yield*для делегирования другому генератору. Это позволяет создавать модульный и многократно используемый код генератора. Вот пример:
function* subGenerator() {
yield 'Foo';
yield 'Bar';
}
function* mainGenerator() {
yield 'Hello';
yield* subGenerator();
yield 'World';
}
const gen = mainGenerator();
console.log(gen.next()); // { value: 'Hello', done: false }
console.log(gen.next()); // { value: 'Foo', done: false }
console.log(gen.next()); // { value: 'Bar', done: false }
console.log(gen.next()); // { value: 'World', done: false }
console.log(gen.next()); // { value: undefined, done: true }
- Асинхронная итерация:
Генераторы также можно использовать для асинхронной итерации с помощью оператора yieldс промисами или синтаксисом async/await. Вот пример:
async function* asyncGenerator() {
yield await Promise.resolve('Hello');
yield await Promise.resolve('World');
}
const gen = asyncGenerator();
gen.next().then(console.log); // { value: 'Hello', done: false }
gen.next().then(console.log); // { value: 'World', done: false }
gen.next().then(console.log); // { value: undefined, done: true }
Генераторы в TypeScript предоставляют гибкий и мощный механизм определения итераторов. Они позволяют легко создавать итерируемые последовательности и обрабатывать асинхронные операции. Используя различные методы и приемы генератора, вы можете писать более чистый и удобный в сопровождении код.