microsoft / microsoft/TypeScript

Broken inference for generic classes passed to a generic function taking an optional class

Open
#61,633 4 comments 0 reactions 1 assignee View on GitHub

@ahejlsberg is already working on this.

Since Apr 30, 2025.

Needs Investigation
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
2d 4h
Merged PRs (30d)
132

Description

### 🔎 Search Terms

class inference, optional class, broken inference

### 🕗 Version & Regression Information

This changed in PR https://github.com/microsoft/TypeScript/pull/31116

However, this was the first time that there was even a distinction between a generic and non-generic class during inference to my knowledge. This likely means this has existed ever since the ability to infer a generic class has existed.

### ⏯ Playground Link

https://www.typescriptlang.org/play/?#code/C4TwDgpgBAggdiAwgezgZ2AJwK4GNjKZQC8UcEA7lABQB09AhpgOZoBcUDCA2gLoCUJAHxRkAIwBWEfAG4AUHIBm2OPgCWqKACUIcACYRMAMQA2DVgFk1ADzVwAPACEGaCIjNo0UCNeC69XvBIqBg4+IRQAD5QKgaKdhB6JDH6EPHkekLUclC5UM6uAPwcBW4eaAA0coIA3gC+8nK45VAocMAMCZj2ACoi9Qo6qcZmljZ21G0dXfxyAPRzeUvLeQB6sCzYALa6wKKKUKCQUADkRxDIB1Od5JgnUGpecMh7LmhqzHAMYibQBFBgJgMHZ+IiXQ7gaAnWJpBJ6E60IA

### 💻 Code

```ts
type AnyConstructor = new (...args: any[]) => object;

function RenderFlagsMixin(
Base?: BaseClass,
) {};

class Container {}
// ^ Only happens when the class is generic.

RenderFlagsMixin(Container)
// ^ Argument of type 'typeof Container' is not assignable to parameter of type 'undefined'.
```

### 🙁 Actual behavior

`BaseClass` is inferred as `undefined` despite the call being the value `Container`.

### 🙂 Expected behavior

`BaseClass` should be inferred as `typeof Container`.

### Additional information about the issue

_No response_

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.