避免 TS“变量在分配之前使用”的替代语法/逻辑。

问题描述 投票:0回答:1

我正在尝试编写一个生成器函数,它将连续返回可迭代中的先前值和当前值对。

function* prevCurrent<T>(iterable: Iterable<T>) {
    let head = true
    let previous: T
    for (const current of iterable) {
        if (head) {
            previous = current
            head = false
            continue
        }
        yield [previous, current]
        previous = current
    }
}

使用方法如下:

const arr = [1, 2, 3]
for (const pair of prevCurrent(arr)) {
    console.log(pair)
}
// [1, 2]
// [2, 3]

但是,在

yield
行,TypeScript 报告:

Variable 'previous' is used before being assigned.

显然静态分析无法识别

yield
只能在
for-of
的第二次迭代中达到,并且
previous
已经设置。

我可以使用

!
运算符轻松解决这个问题。但是是否有静态分析可以接受的替代语法或逻辑?

typescript iterator
1个回答
0
投票

考虑自己创建迭代器:

function* prevCurrent<T>(iterable: Iterable<T>) {
    const iterator = iterable[Symbol.iterator]();
    const { value, done } = iterator.next();
    if (done) return;
    let previous: T = value;
    for (const current of iterator) {
        yield [previous, current]
        previous = current
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.