Skip to content

Inconsistent error between different versions of the same function with required parameter following an optional oneΒ #57565

@Andarist

Description

@Andarist

πŸ”Ž Search Terms

error function optional required rest

πŸ•— Version & Regression Information

  • This is the behavior in every version I tried

⏯ Playground Link

https://www.typescriptlang.org/play?ts=5.5.0-dev.20240227#code/GYVwdgxgLglg9mABAIwIYCcAUqBciwgC2yApugDQoD8eBxZlEtRpFiAdJxgOYDOevKOhhhuAbQC6ASkQBvAL4AoRWnSKA9OsQA9KolCRYCFBmzN6bZDXwsGiJjYuVO7Hv0SDhoyVLwA3OBgAE2VVTABGKQBuRE1EAFEADwAHEmgSIMRUKEQAGxJUQUQAZiz0biISMCheSmQQHO44HPD2TAAmAFZuqWUDaHgkNAAvM0dWOus6CY4ucvcxB2m7FzcBIRFxCWk5JRVUYY0tXX1wAeMRseXLKds2JbvnOb51ry3fRADg0IOI6NitElUulMtk8gUiqUeJVqrUUA1EE0Wm0uj1FEA

πŸ’» Code

function bar(a: number, b?: number, c: number, ...args: string[]) {}

bar
// ^? function bar(a: number, b?: number, c: number, ...args: string[]): void

bar(1); // Expected at least 3 arguments, but got 1.(2555)

function baz(a: number, b?: number, ...args: [c: number, ...args: string[]]) {}

baz
// ^? function baz(a: number, b?: number, c: number, ...args: string[]): void

baz(1); // Expected at least 3 arguments, but got 1.(2555)

πŸ™ Actual behavior

We get an error within the bar declaration ("'c' is declared but its value is never read.(6133)") but we get none in baz. They are pretty much equivalent.

πŸ™‚ Expected behavior

I'd expect this error to be raised consistently here (or not raised consistently).

In addition to that, b comes with the question mark in both quick infos here. TypeScript understands that at least 3 arguments are required here. It means that effectively b is required in both cases and ? is somewhat misleading here. I think it would be good to normalize this. It already is normalized with tuples:

type A = [a: number, b?: number, ...[c: number, ...args: string[]]]
//   ^? type A = [a: number, b: number | undefined, c: number, ...args: string[]]

Additional information about the issue

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Awaiting More FeedbackThis means we'd like to hear from more people who would be helped by this featureSuggestionAn idea for TypeScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions