Skip to content

Improve definition GetLeadingNonServiceArgs to keep parameter names #151203

@hediet

Description

@hediet

This is the current definition of GetLeadingNonServiceArgs:

type GetLeadingNonServiceArgs<Args> =
	Args extends [...BrandedService[]] ? []
	: Args extends [infer A, ...BrandedService[]] ? [A]
	: Args extends [infer A, ...infer R] ? [A, ...GetLeadingNonServiceArgs<R>]
	: never;

Unfortunately, it loses the names of the parameters:

image

However, if we change the definition to this:

type GetLeadingNonServiceArgs<TArgs extends any[]> =
	TArgs extends [] ? []
	: TArgs extends [...infer TFirst, infer TLast] ? TLast extends BrandedService ? GetLeadingNonServiceArgs2<TFirst> : TArgs
	: never;

The parameter names are kept:

image

I don't know how this affects type-checking performance though.

Metadata

Metadata

Assignees

Labels

editor-coreEditor basic functionalityengineeringVS Code - Build / issue tracking / etc.insiders-releasedPatch has been released in VS Code Insiders

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions