TS can't infer an arbitrary amount of overloads, best you can do is this
class X {
constructor(arg1: number, arg2: string)
constructor(arg1: string)
constructor(obj: string | number, arg2?: string) {}
}
type ConstructorsParameters<T> = T extends {
new(...args: infer A1): unknown
new(...args: infer A2): unknown
} ? A1 | A2 : never
type Y = ConstructorsParameters<typeof X>
Then you can chain these to work with a variable number of overloads:
type ConstructorsParameters<T> = T extends {
new(...args: infer A1): unknown
new(...args: infer A2): unknown
new(...args: infer A3): unknown
} ? A1 | A2 | A3 : T extends {
new(...args: infer A1): unknown
new(...args: infer A2): unknown
} ? A1 | A2 : T extends {
new(...args: infer A1): unknown
} ? A1 : never
This can be extended to work with a reasonable amount of overloads your constructors can have