Generator의 세 타입 축이 yield·return·next 입력을 분리한다

function* 호출은 본문을 실행하지 않고 suspended 상태의 객체를 만든다. 각 next가 실행을 재개해 다음 yield 또는 종료까지 진행한다.

01 · CREATE호출·일시정지

본문 실행 없이 generator object 반환

02 · YIELDnext(){ value: TYield, done: false }
03 · RESUMEnext(input)

input: TNext가 직전 yield 표현식의 결과가 된다.

04 · DONEreturn·끝{ value: TReturn, done: true }
TYield · 밖으로

yield valuedone:false의 value 타입

TReturn · 종료값

return valuedone:true의 value 타입

TNext · 안으로

소비자가 다음 재개 때 넣는 값의 타입

TYPEvalue가 union

done으로 좁혀 yield와 return 값을 구분한다.

INPUT첫 입력 누락

next(x)의 x는 버려진다. 먼저 next()로 시작한다.

RETURNfor...of 경계

반복은 yielded 값만 소비한다. 종료값이 필요하면 수동 nextdone:true를 읽는다.

검증 기준: 무한 generator는 소비자의 종료 조건을 명시하고, 외부 중단 때 정리가 필요하면 try/finally와 iterator return() 경로를 시험한다.