Skip to content

Case for inference failure in T extends F<T>Β #51377

Description

Bug Report

πŸ”Ž Search Terms

circular type parameter constraint

Related issues: #40439 #30134

πŸ•— Version & Regression Information

Tested with 4.8.4

⏯ Playground Link

Playground

πŸ’» Code

declare const f:
  <T extends F<T>>(t: T) => T

type F<T> =
  { a: unknown
  , b: (a: T extends { a: infer X } ? X : never) => unknown
  }

f({
  a: "hello",
  b: x => x.toUpperCase()
})
// doesn't compile because infers `x` as `unknown` instead of `string`

f({
  a: "hello",
  b: (x: string) => x.toUpperCase()
})
// compiles

Note that there is a workaround but it's only a workaround for this minimal case and not for the real world case from which this minimal case was derived.

πŸ™ Actual behavior

x in the first f call gets inferred as unknown

πŸ™‚ Expected behavior

x in the first f call should get inferred as string

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions