Open
Description
#54813 attempted to make this work, but exposed an underlying bug that caused too many instantiations. Once that bug is fixed, the code in #54813 should be re-applied if possible.
Here's an example of something that should work, but doesn't:
// @strict: true
// @noEmit: true
interface Action<TContext> {
new (ctx: TContext): void;
}
declare class AssignAction<TContext> {
constructor(ctx: TContext);
}
declare function assign<TContext>(
assigner: (ctx: TContext) => void
): {
new (ctx: TContext): AssignAction<TContext>;
}
declare function createMachine<TContext>(config: {
context: TContext;
entry: Action<TContext>;
}): void;
createMachine({
context: { count: 0 },
entry: assign((ctx) => { ctx }),
});
ctx
should have type { count: number }
, inferred from the context of assign
, but doesn't.