Infer stress N=25
No-emit type-check timing for infer stress n=25.
tsz is 5.2x faster 514 lines 10 KB
Timing
Files
// Infer keyword stress test
// Tests inference variable resolution in conditional types
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
type UnwrapArray<T> = T extends (infer U)[] ? U : T;
type MyParameters<T> = T extends (...args: infer P) => any ? P : never;
type MyReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
// Multi-infer conditional
type FirstAndRest<T> = T extends [infer First, ...infer Rest] ? { first: First; rest: Rest } : never;
// Nested infer
type DeepUnwrap<T> =
T extends Promise<infer U> ? DeepUnwrap<U> :
T extends (infer V)[] ? DeepUnwrap<V>[] :
T;
// Infer in template literal
type ExtractPrefix<T> = T extends `${infer P}_${string}` ? P : never;
// Infer with constraints
type ExtractIfString<T> = T extends infer U extends string ? U : never;
declare function func0(
arg0: string
): number;
type Params0 = MyParameters<typeof func0>;
type Return0 = MyReturnType<typeof func0>;
declare function func1(
arg0: string,
arg1: string
): number;
type Params1 = MyParameters<typeof func1>;
type Return1 = MyReturnType<typeof func1>;
declare function func2(
arg0: string,
arg1: string,
arg2: string
): number;
type Params2 = MyParameters<typeof func2>;
type Return2 = MyReturnType<typeof func2>;
declare function func3(
arg0: string,
arg1: string,
arg2: string,
arg3: string
): number;
type Params3 = MyParameters<typeof func3>;
type Return3 = MyReturnType<typeof func3>;
declare function func4(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string
): number;
type Params4 = MyParameters<typeof func4>;
type Return4 = MyReturnType<typeof func4>;
declare function func5(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string
): number;
type Params5 = MyParameters<typeof func5>;
type Return5 = MyReturnType<typeof func5>;
declare function func6(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string
): number;
type Params6 = MyParameters<typeof func6>;
type Return6 = MyReturnType<typeof func6>;
declare function func7(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string
): number;
type Params7 = MyParameters<typeof func7>;
type Return7 = MyReturnType<typeof func7>;
declare function func8(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string
): number;
type Params8 = MyParameters<typeof func8>;
type Return8 = MyReturnType<typeof func8>;
declare function func9(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string
): number;
type Params9 = MyParameters<typeof func9>;
type Return9 = MyReturnType<typeof func9>;
declare function func10(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string
): number;
type Params10 = MyParameters<typeof func10>;
type Return10 = MyReturnType<typeof func10>;
declare function func11(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string
): number;
type Params11 = MyParameters<typeof func11>;
type Return11 = MyReturnType<typeof func11>;
declare function func12(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string
): number;
type Params12 = MyParameters<typeof func12>;
type Return12 = MyReturnType<typeof func12>;
declare function func13(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string,
arg13: string
): number;
type Params13 = MyParameters<typeof func13>;
type Return13 = MyReturnType<typeof func13>;
declare function func14(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string,
arg13: string,
arg14: string
): number;
type Params14 = MyParameters<typeof func14>;
type Return14 = MyReturnType<typeof func14>;
declare function func15(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string,
arg13: string,
arg14: string,
arg15: string
): number;
type Params15 = MyParameters<typeof func15>;
type Return15 = MyReturnType<typeof func15>;
declare function func16(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string,
arg13: string,
arg14: string,
arg15: string,
arg16: string
): number;
type Params16 = MyParameters<typeof func16>;
type Return16 = MyReturnType<typeof func16>;
declare function func17(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string,
arg13: string,
arg14: string,
arg15: string,
arg16: string,
arg17: string
): number;
type Params17 = MyParameters<typeof func17>;
type Return17 = MyReturnType<typeof func17>;
declare function func18(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string,
arg13: string,
arg14: string,
arg15: string,
arg16: string,
arg17: string,
arg18: string
): number;
type Params18 = MyParameters<typeof func18>;
type Return18 = MyReturnType<typeof func18>;
declare function func19(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string,
arg13: string,
arg14: string,
arg15: string,
arg16: string,
arg17: string,
arg18: string,
arg19: string
): number;
type Params19 = MyParameters<typeof func19>;
type Return19 = MyReturnType<typeof func19>;
declare function func20(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string,
arg13: string,
arg14: string,
arg15: string,
arg16: string,
arg17: string,
arg18: string,
arg19: string,
arg20: string
): number;
type Params20 = MyParameters<typeof func20>;
type Return20 = MyReturnType<typeof func20>;
declare function func21(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string,
arg13: string,
arg14: string,
arg15: string,
arg16: string,
arg17: string,
arg18: string,
arg19: string,
arg20: string,
arg21: string
): number;
type Params21 = MyParameters<typeof func21>;
type Return21 = MyReturnType<typeof func21>;
declare function func22(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string,
arg13: string,
arg14: string,
arg15: string,
arg16: string,
arg17: string,
arg18: string,
arg19: string,
arg20: string,
arg21: string,
arg22: string
): number;
type Params22 = MyParameters<typeof func22>;
type Return22 = MyReturnType<typeof func22>;
declare function func23(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string,
arg13: string,
arg14: string,
arg15: string,
arg16: string,
arg17: string,
arg18: string,
arg19: string,
arg20: string,
arg21: string,
arg22: string,
arg23: string
): number;
type Params23 = MyParameters<typeof func23>;
type Return23 = MyReturnType<typeof func23>;
declare function func24(
arg0: string,
arg1: string,
arg2: string,
arg3: string,
arg4: string,
arg5: string,
arg6: string,
arg7: string,
arg8: string,
arg9: string,
arg10: string,
arg11: string,
arg12: string,
arg13: string,
arg14: string,
arg15: string,
arg16: string,
arg17: string,
arg18: string,
arg19: string,
arg20: string,
arg21: string,
arg22: string,
arg23: string,
arg24: string
): number;
type Params24 = MyParameters<typeof func24>;
type Return24 = MyReturnType<typeof func24>;
// Complex nested inference
type ComplexInfer<T> = T extends {
data: infer D;
nested: { value: infer V }[]
} ? { data: D; values: V[] } : never;
interface TestData {
data: string;
nested: { value: number }[];
}
type Inferred = ComplexInfer<TestData>;
declare const params: Params24;
declare const inferred: Inferred;