2017-08-18 6 views
0

Ich halte den Zug mit den Generatoren, wenn das lästige Transpilerverhalten auftritt. Natürlich benutze ich --strictNullChecksTypeScript - möglicherweise undefinierter Kompilierfehler beim Iterator werfen

function* generat(end: number) { 
    for (let i = 0; i <= end; i++) { 
    try { 
     yield i; 
    } catch (e) { 
     console.log(e); 
    } 
    } 
} 

let iterat = generat(5); 

console.log(iterat.next()); 
console.log(iterat.next()); 
console.log(iterat.throw()); // error: Object is possibly 'undefined'. 
console.log(iterat.next()); 
console.log(iterat.next()); 
console.log(iterat.next()); 

Jeder weiß eine kluge Lösung? Ich meine, smart von etwas anders als in diesem Link: https://github.com/Microsoft/TypeScript/issues/14431

Antwort

0

Leider throw and return are both optional in Iterator.

interface Iterator<T> { 
    next(value?: any): IteratorResult<T>; 
    return?(value?: any): IteratorResult<T>; 
    throw?(e?: any): IteratorResult<T>; 
} 

Ehrlich, ich verstehe nicht, warum Generatoren Iteratoren anstelle von etwas spezifischer zurückgeben müssen. Immerhin gibt GeneratorFunctions immer etwas zurück und sie können immer Fehler machen. I filed a suggestion for TypeScript here.

In der Zwischenzeit können Sie dieses Problem umgehen, indem Sie:

iterat.throw!() 
Verwandte Themen