Skip to content

On DT, lambda-tester is broken by better alias preservation #51698

Closed
@sandersn

Description

@sandersn

lambda-tester is broken by #51152.

Conditional type instantiation seems to proceed differently for an alias when it was constructed without type parameters that are later defaulted:

type Actual = lambdaTester.Verifier<lambdaTester.HandlerResult<Handler>>
type Expected = lambdaTester.Verifier<lambdaTester.HandlerResult<Handler<any, any>>>

// from lambda-tester's index.d.ts:
type HandlerResult<T extends Handler> = T extends Handler<any, infer TResult> ? TResult : never;
type Verifier<S> = S extends HandlerError<Handler>
    ? (S extends string ? VerifierFn<string>
       : S extends Error ? VerifierFn<Error>
       : never)
    : VerifierFn<S>;
class LambdaTester<T extends Handler> {
    // ....
    expectSucceed(verifier: Verifier<HandlerResult<T>>): Promise<any>;
    // ....
}
// from aws-lambda's index.d.ts:
export type Handler<TEvent = any, TResult = any> = (
    event: TEvent,
    context: Context,
    callback: Callback<TResult>,
) => void | Promise<TResult>;

Actual and Expected are both VerifierFn<string> | VerifierFn<Error> | VerifierFn<any> before #51152. Afterwards, Actual is VerifierFn<unknown>.

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issueRecent RegressionThis is a new regression just found in the last major/minor version of TypeScript.

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions