Skip to content

NoInfer isn't erased and breaks type narrowingΒ #58266

@patroza

Description

@patroza

πŸ”Ž Search Terms

NoInfer

πŸ•— Version & Regression Information

  • This changed between versions 5.3 and 5.4 (introduced)

⏯ Playground Link

https://www.typescriptlang.org/play?ts=5.5.0-dev.20240419#code/C4TwDgpgBAglC8UDeB9YBDA5gLigInTwF8AoUSKAIQWTS1zwCNiSzxoBVGuAHytYD0AqOWgA5APYBJAHYAzCACcATAB4YAPm6sAxhJkBnYFAC2uJIogGArgBtguSbIWLVHDUQDaAXRo-WctYyOsAAlvqm6GDqADRUGgAUocAQJga4lugAJvq2ILA+cXK4CeiO0vJK6hoAlAhalHVIUJbA1ooyUFDJqQYAdCZRCXJ1pEJQEDJZBlDWYFDoM1AJzZY29uXOVe4A3FBEUHwydrY1Pt2GKdlQEnLLq1Z2DrB7B0cnZ94kepdQBhImCDAAAWoRkmBogzACRMcQSKDq8C0KD6ayefToEPg2PwhCgAH5kFA+iSUHE0RsoCiKcYDrhjrZTiQgA

πŸ’» Code

type A = {_tag: "a"}
type B = {_tag: "b"}

type U = A | B

// type NoInfer2<A> = A

const m: { result: NoInfer<U> }[] = []

function map<A, B>(items: readonly A[], f: (a: NoInfer<A>) => B) { return  items.map(f) }
// ends up as  ({ result: NoInfer<U>; } | null)[] instead of ({ result: A; } | null)[]
const something = map(m, (_) => _.result._tag === "a" ? { ..._, result: _.result } : null)

πŸ™ Actual behavior

ends up as ({ result: NoInfer<U>; } | null)[]

πŸ™‚ Expected behavior

({ result: A; } | null)[]

Additional information about the issue

use the custom NoInfer2 type instead, and it works as expected.

Here's the actual source that lead me to the problem https://www.typescriptlang.org/play#code/JYWwDg9gTgLgBAbzgQSlAhgTwDRwKIBmBApgMYy4DyYMwEAdnAL5wFQQhwBExRZMXAFCDSDAM7woxMQFcANjDFwAvHADahEuQB0s0qWLEAJgAoAjAEptYYGGInN-bcQAewCvj4709IwBUAC2J6E1d3FQA+OBMkMPgmCwtcRx0oGXoAZUx6UgsAXWFReglWdGA5YxUUNCxtAnKYYigAWXQwEylZBTFcEwB9C0jBOBG+5zcYbT6YdABzFWVVLgAxMrkZKS44AH44aloGXQ57JG0zvtw4gC44MbjmQZv9unptegZ7C0EvoA

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptHelp WantedYou can do this

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions