-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Open
Labels
Milestone
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
π» 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