Microsoft/TypeScript

Problem with function types, <T>() => T extends X ? () : ()

Open

#56 721 ouverte le 9 déc. 2023

Voir sur GitHub
 (10 commentaires) (0 réactions) (0 assignés)TypeScript (6 726 forks)batch import
Cursed?Domain: check: Variance RelationshipsHelp WantedPossible Improvement

Métriques du dépôt

Stars
 (48 455 stars)
Métriques de merge PR
 (Merge moyen 6j 17h) (9 PRs mergées en 30 j)

Description

🔎 Search Terms

"function", "generic function"

🕗 Version & Regression Information

⏯ Playground Link

https://www.typescriptlang.org/play?#code/C4TwDgpgBAYgdgHgBoD4oF4oICooBQCUGa2UEAHsBHACYDOUSUA-FAIxQBcUATAFChIUAKIBHAK4BDADZ02yADRQAmmnR8osRKjKVq9DVoSqWUYACdx0bgDMZdCHwHhoAdXMB7OAHMAShDpxaWAMEQl7eQBvcwhJGi9pEChJbgByAEFUgF8lSJSoDOyUJydBaHh5HUwcfCJ0El0qWgYmVg5ufjKtHmQ1LFxCYihSCib6RlN23mchMSlZHqQlE3VNCt7G-TpDeB6TVgsrLig7WUcZ6ABhD3MYgGNgf0Dg0Ln7HujY+LhE5LTMnJQPL-IpAA

💻 Code

type Fn<X> = <T>() => T extends X ? 1 : 2
type Equals<X, Y> =
  Fn<X> extends
  Fn<Y> ? true : false

type A = Equals<{readonly a: 'A'}, {a: 'A'}>

🙁 Actual behavior

type A should shows true.

🙂 Expected behavior

type A should be false.

It works well when the code is like this.

type Fn1<X> = <T>() => T extends X ? 1 : 2
type Fn2<X> = <T>() => T extends X ? 1 : 2
type Equals<X, Y> =
  Fn1<X> extends
  Fn2<Y> ? true : false

type A = Equals<{readonly a: 'A'}, {a: 'A'}>

Additional information about the issue

No response

Guide contributeur