Skip to content

Literal tested as key of a certain type cannot be used as an index typeΒ #57109

Open

Description

@ghostinpeace

πŸ”Ž Search Terms

"literal", "extends", "keyof", "cannot be used to index type", "conditional"

πŸ•— Version & Regression Information

Versions: ^5.0 (regression)

⏯ Playground Link

https://www.typescriptlang.org/play?ts=5.3.3&ssl=7&ssc=54&pln=1&pc=1#code/C4TwDgpgBAKlC8UDeBYAUFKBrAXFAziALYBGA9gDYA06mZwAFhAE57mUQCGAdlVAPT8oPek2bYIIAhAhF8UZhACOAVwCWigCZQAZmXGNoJFQHMowMsLCROzdAF906QbHDQA5ACIsn91ADGPNz0UCTQKvgQ2pzyPFBq3JoQAB7mbgB0ABQATACsAMwAHACU6KCQUADCCFDuWH4pwBCJ8liSZDqwUAD8sADade4AulB43BAAbiwA3AJCPCBAA

πŸ’» Code

type T = {
  k: symbol,
  other: boolean, // another key seems required for the bug to appear
}

// Type '"k"' cannot be used as an index type.(2538)
type C = 'k' extends keyof T ? T['k'] : never; // any

πŸ™ Actual behavior

An error is produced in the positive clause of the conditional type.
The resulting type is incorrect.

πŸ™‚ Expected behavior

No error.

Additional information about the issue

No response

Activity

  1. changed the title [-]Literal tested as key of a certain type in condition cannot be used to index that type[/-] [+]Literal tested as key of a certain type cannot be used to index that type[/+] on Jan 20, 2024
  2. changed the title [-]Literal tested as key of a certain type cannot be used to index that type[/-] [+]Literal tested as key of a certain type cannot be used as an index type[/+] on Jan 20, 2024
  3. craigphicks commented on Jan 21, 2024

    @craigphicks

    Weird. This works

    type T = {
      k: symbol,
      other: boolean, // another key seems required for the bug to appear
    }
    type C<U=T> = 'k' extends keyof U ? U['k'] : never;
    type X = C; // symbol
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptDomain: Indexed Access TypesThe issue relates to accessing subtypes via index access

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions