@@ -213,7 +213,7 @@ export function initAllState(
213213/**
214214 * Wraps a function that accepts an `ActionState` for testing in different environments.
215215 */
216- class EnvBuilder <
216+ abstract class BaseEnvBuilder <
217217 Args extends readonly any [ ] ,
218218 R ,
219219 Fs extends ReadonlyArray < AllState [ number ] > ,
@@ -224,7 +224,7 @@ class EnvBuilder<
224224
225225 constructor (
226226 fn : ( state : ActionState < Fs > , ...args : Args ) => R ,
227- cloneFrom ?: EnvBuilder < Args , R , Fs > ,
227+ cloneFrom ?: BaseEnvBuilder < Args , R , Fs > ,
228228 ) {
229229 this . fn = fn ;
230230 this . logger = new RecordingLogger ( ) ;
@@ -238,9 +238,7 @@ class EnvBuilder<
238238 * Creates a clone of this object. Used internally.
239239 * Must be overriden by subclasses.
240240 */
241- protected clone ( ) : this {
242- return new EnvBuilder ( this . fn , this ) as this;
243- }
241+ protected abstract clone ( ) : this;
244242
245243 public getLogger ( ) : RecordingLogger {
246244 return this . logger ;
@@ -274,17 +272,27 @@ class EnvBuilder<
274272 }
275273}
276274
275+ class EnvBuilder <
276+ Args extends readonly any [ ] ,
277+ R ,
278+ Fs extends ReadonlyArray < AllState [ number ] > ,
279+ > extends BaseEnvBuilder < Args , R , Fs > {
280+ protected clone ( ) : this {
281+ return new EnvBuilder ( this . fn , this ) as this;
282+ }
283+ }
284+
277285class CallableEnvBuilder <
278286 Args extends readonly any [ ] ,
279287 R ,
280288 Fs extends ReadonlyArray < AllState [ number ] > ,
281- > extends EnvBuilder < Args , R , Fs > {
289+ > extends BaseEnvBuilder < Args , R , Fs > {
282290 private args : Args ;
283291
284292 constructor (
285293 fn : ( state : ActionState < Fs > , ...args : Args ) => R ,
286294 args : Args ,
287- cloneFrom ?: EnvBuilder < Args , R , Fs > ,
295+ cloneFrom ?: BaseEnvBuilder < Args , R , Fs > ,
288296 ) {
289297 super ( fn , cloneFrom ) ;
290298 this . args = args ;
0 commit comments