Skip to content

Certain conditional types allow unsound assignmentsΒ #55733

Open
@mkantor

Description

@mkantor

πŸ”Ž Search Terms

"conditional type" generic assignment

πŸ•— Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about conditional types

⏯ Playground Link

https://www.typescriptlang.org/play?#code/C4TwDgpgBAQg9gDwDwBUB8UC8UDeUBuAhgDYCuEAXFClAL4BQ9okUAqgHYBGiAku+xABOqDNhoQEwCOwAmAZ1iIkAS3YAzIVABKGAPxsuvfkKQ6oVPKUMIIMqjQbNoHbsnRYDrvgOHoA2gDkVq62AQC6jDIQAMbEhILQalbRwMpw7FDBSugAFAj2AJRULtlojEnsKWkZEoQAtmDEECJ5hbj0UFBNwFCEHlkIeQUdvR4BwAAWygpyE3CkxDJQnNCENYKCcIIB9LRAA

πŸ’» Code

type Box<T> = { value: T }

type UnboxInner<T> = T extends Box<infer R> ? UnboxInner<R> : { unboxed: T }
type Unbox<T> = UnboxInner<T>['unboxed']

declare function unbox<T>(x: T): Unbox<T>

function example<T>(x: T) {
  let a = unbox(x)
  a = 'this should be an error'
}

πŸ™ Actual behavior

In example we can assign arbitrary values to a, even though it's typed as Unbox<T>.

πŸ™‚ Expected behavior

Attempting to assign invalid values to a (just about anything, since its type depends on a type parameter) should cause a type error.

Additional information about the issue

These issues may possibly be related:

cc @webstrand

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptCursed?It's likely this is extremely difficult to fix without making something else much, much worseHelp WantedYou can do this

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions