Microsoft/TypeScript

Unable to infer parameters for generic constructor/functions with a distributive conditional type

Open

#62,079 opened on Jul 16, 2025

View on GitHub
ย (1 comment)ย (0 reactions)ย (0 assignees)TypeScriptย (48,455 stars)ย (6,726 forks)batch import
BugDomain: Conditional TypesHelp Wanted

Description

๐Ÿ”Ž Search Terms

generic constructor, generic function, branded string, ConstructorParameters, Parameters, unable to infer.

๐Ÿ•— Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ

โฏ Playground Link

https://www.typescriptlang.org/play/?#code/KYDwDg9gTgLgBAbwL4G4CwAoTBLAdjYKAMwEMBjYOAfQFkSxFM44iIIAuROEzgRgCYAzHCSZRWDDACeYSjQgATAK4AbYAGUlAIwAqMygF44AIi0koxuADIuWqCVwLOMKEsqpMmabLh0GR2nprOAAlYDJoBQAeeWU1TV19ABpbFRIAC04AZxc8AHMRAD5PSX04BL1ZAHFgGCimcu1KylACRyy4HKh8pIa-OFbgdtDwyKiK5LglXABrXAgAd1xC3oxCuCMJn0Hh6bnF3EwAfi5vYCPOLfdgvwBtK4BdTE5cYAA3QnQJAHpvuB10tgOkC4DB0pQALYQHKdFwkbB5dIwVhQBbmBRwNFSOAASTgZAcLARSiglAgSngMAg+IgEMoVNBgOBWSybnYXjKOmAOQACuYSHSCFAOkY+fZBYQslEojoBiA2goOsZWBBLAAfXyKVQaJr6QoACnMeUuuuqtRlKT8hQAlBt1m8INgFMUML9mHAAHonV4fKAlN146AIvAkFQqbFDCLTIXADHYeALePpbj4tIsuAqbAzelM9kYBThNKk1MkdNcnIyuUKpUq9WauI6xKydYIBoRXBdJRkKlQQ1QY2NJvAGp1HSW+g2r7iDk+cswADCEA7Li7PbFAtqko2cEXy9c3eg64lwqiZwgRH+3JghS+buYXrgPsIQA

๐Ÿ’ป Code

export {};

interface _Map {
  foo: { a: 123 }
}

type ModuleSubType = "bar" & { brand: true };

type Map = _Map & Record<ModuleSubType, { blah: string }>

type SubTypeGet<
  SubType extends string,
  Map extends Record<SubType, unknown>,
> = SubType extends unknown
? { type?: SubType } & Map[SubType]
: never;

// This is the most straightforward way I can figure out to come to this issue:
type TestParameters = Parameters<<T extends "foo" | ModuleSubType>(arg: SubTypeGet<T, Map>) => void>
//   ^? never

// I originally encountered it with a class like this:
declare class Test<T extends "foo" | ModuleSubType> {
  constructor(arg: SubTypeGet<T, Map>);
}

type TestConstructorParameters = ConstructorParameters<typeof Test>;
//   ^? never

๐Ÿ™ Actual behavior

Parameters fails to infer anything.

๐Ÿ™‚ Expected behavior

Parameters should infer something, probably [arg: { type?: ModuleSubType | undefined; } | ({ type?: "foo" | undefined; } & { a: 123; })] as it would if the function/class were instantiated.

Additional information about the issue

No response

Contributor guide

Unable to infer parameters for generic constructor/functions with a distributive conditional type ยท Microsoft/TypeScript#62079 | Good First Issue