1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
//// [generatorTypeCheck62.ts]
export interface StrategicState {
lastStrategyApplied?: string;
}
export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>): (a: T) => IterableIterator<T | undefined> {
return function*(state) {
for (const next of gen(state)) {
if (next) {
next.lastStrategyApplied = stratName;
}
yield next;
}
}
}
export interface Strategy<T> {
(a: T): IterableIterator<T | undefined>;
}
export interface State extends StrategicState {
foo: number;
}
export const Nothing1: Strategy<State> = strategy("Nothing", function*(state: State) {
return state;
});
export const Nothing2: Strategy<State> = strategy("Nothing", function*(state: State) {
yield state;
});
export const Nothing3: Strategy<State> = strategy("Nothing", function* (state: State) {
yield ;
return state;
});
//// [generatorTypeCheck62.js]
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function strategy(stratName, gen) {
return function* (state) {
for (const next of gen(state)) {
if (next) {
next.lastStrategyApplied = stratName;
}
yield next;
}
};
}
exports.strategy = strategy;
exports.Nothing1 = strategy("Nothing", function* (state) {
return state;
});
exports.Nothing2 = strategy("Nothing", function* (state) {
yield state;
});
exports.Nothing3 = strategy("Nothing", function* (state) {
yield;
return state;
});
|