Microsoft/TypeScript

Contextual inference for nested calls that return constructors

Open

#57.747 aberto em 12 de mar. de 2024

Ver no GitHub
 (2 comments) (0 reactions) (0 assignees)TypeScript (6.726 forks)batch import
Domain: check: Type InferenceHelp WantedPossible Improvement

Métricas do repositório

Stars
 (48.455 stars)
Métricas de merge de PR
 (Mesclagem média 6d 17h) (9 fundiu PRs em 30d)

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.

Guia do colaborador