diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 93f559c1faa79..4fca657a214e1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -37307,7 +37307,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return nullWideningType; case SyntaxKind.NoSubstitutionTemplateLiteral: case SyntaxKind.StringLiteral: - return getFreshTypeOfLiteralType(getStringLiteralType((node as StringLiteralLike).text)); + return hasSkipDirectInferenceFlag(node) ? + anyType : + getFreshTypeOfLiteralType(getStringLiteralType((node as StringLiteralLike).text)); case SyntaxKind.NumericLiteral: checkGrammarNumericLiteral(node as NumericLiteral); return getFreshTypeOfLiteralType(getNumberLiteralType(+(node as NumericLiteral).text)); diff --git a/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts b/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts new file mode 100644 index 0000000000000..e80c014546d73 --- /dev/null +++ b/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts @@ -0,0 +1,41 @@ +/// +// @strict: true +//// +//// type ActorRef = { +//// send: (ev: TEvent) => void +//// } +//// +//// type Action = { +//// (ctx: TContext): void +//// } +//// +//// type Config = { +//// entry: Action +//// } +//// +//// declare function createMachine(config: Config): void +//// +//// type EventFrom = T extends ActorRef ? TEvent : never +//// +//// declare function sendTo< +//// TContext, +//// TActor extends ActorRef +//// >( +//// actor: ((ctx: TContext) => TActor), +//// event: EventFrom +//// ): Action +//// +//// createMachine<{ +//// child: ActorRef<{ type: "EVENT" }>; +//// }>({ +//// entry: sendTo((ctx) => ctx.child, { type: /*1*/ }), +//// }); +//// +//// createMachine<{ +//// child: ActorRef<{ type: "EVENT" }>; +//// }>({ +//// entry: sendTo((ctx) => ctx.child, { type: "/*2*/" }), +//// }); + +verify.completions({ marker: "1", includes: [`"EVENT"`] }) +verify.completions({ marker: "2", exact: [`EVENT`] }) \ No newline at end of file