From eb5419fc8d980859b98553586dfb5f40d811a745 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Mon, 5 Dec 2022 11:13:46 -0800 Subject: [PATCH] Cherry-pick #51704 to release 4.9 (#51712) * Manual port of #51704 * Add a testcase --- src/compiler/checker.ts | 2 +- tests/baselines/reference/satisfiesEmit.errors.txt | 13 +++++++++++++ tests/baselines/reference/satisfiesEmit.js | 12 ++++++++++++ tests/baselines/reference/satisfiesEmit.symbols | 10 ++++++++++ tests/baselines/reference/satisfiesEmit.types | 10 ++++++++++ tests/cases/compiler/satisfiesEmit.ts | 3 +++ 6 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/satisfiesEmit.errors.txt create mode 100644 tests/baselines/reference/satisfiesEmit.js create mode 100644 tests/baselines/reference/satisfiesEmit.symbols create mode 100644 tests/baselines/reference/satisfiesEmit.types create mode 100644 tests/cases/compiler/satisfiesEmit.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 73797735e2ffe..1e58b72b7e1d2 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -32707,13 +32707,13 @@ namespace ts { function checkSatisfiesExpression(node: SatisfiesExpression) { checkSourceElement(node.type); + const exprType = checkExpression(node.expression); const targetType = getTypeFromTypeNode(node.type); if (isErrorType(targetType)) { return targetType; } - const exprType = checkExpression(node.expression); checkTypeAssignableToAndOptionallyElaborate(exprType, targetType, node.type, node.expression, Diagnostics.Type_0_does_not_satisfy_the_expected_type_1); return exprType; diff --git a/tests/baselines/reference/satisfiesEmit.errors.txt b/tests/baselines/reference/satisfiesEmit.errors.txt new file mode 100644 index 0000000000000..45f8097024cf3 --- /dev/null +++ b/tests/baselines/reference/satisfiesEmit.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/satisfiesEmit.ts(2,20): error TS2307: Cannot find module 'foo' or its corresponding type declarations. +tests/cases/compiler/satisfiesEmit.ts(3,23): error TS2304: Cannot find name 'bleh'. + + +==== tests/cases/compiler/satisfiesEmit.ts (2 errors) ==== + // This import should not be elided in the emitted JS + import a = require("foo"); + ~~~~~ +!!! error TS2307: Cannot find module 'foo' or its corresponding type declarations. + const p = a satisfies bleh; + ~~~~ +!!! error TS2304: Cannot find name 'bleh'. + \ No newline at end of file diff --git a/tests/baselines/reference/satisfiesEmit.js b/tests/baselines/reference/satisfiesEmit.js new file mode 100644 index 0000000000000..6851dbe9f8dd5 --- /dev/null +++ b/tests/baselines/reference/satisfiesEmit.js @@ -0,0 +1,12 @@ +//// [satisfiesEmit.ts] +// This import should not be elided in the emitted JS +import a = require("foo"); +const p = a satisfies bleh; + + +//// [satisfiesEmit.js] +"use strict"; +exports.__esModule = true; +// This import should not be elided in the emitted JS +var a = require("foo"); +var p = a; diff --git a/tests/baselines/reference/satisfiesEmit.symbols b/tests/baselines/reference/satisfiesEmit.symbols new file mode 100644 index 0000000000000..051902990e69b --- /dev/null +++ b/tests/baselines/reference/satisfiesEmit.symbols @@ -0,0 +1,10 @@ +=== tests/cases/compiler/satisfiesEmit.ts === +// This import should not be elided in the emitted JS +import a = require("foo"); +>a : Symbol(a, Decl(satisfiesEmit.ts, 0, 0)) + +const p = a satisfies bleh; +>p : Symbol(p, Decl(satisfiesEmit.ts, 2, 5)) +>a : Symbol(a, Decl(satisfiesEmit.ts, 0, 0)) +>bleh : Symbol(bleh) + diff --git a/tests/baselines/reference/satisfiesEmit.types b/tests/baselines/reference/satisfiesEmit.types new file mode 100644 index 0000000000000..9546af9e238c6 --- /dev/null +++ b/tests/baselines/reference/satisfiesEmit.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/satisfiesEmit.ts === +// This import should not be elided in the emitted JS +import a = require("foo"); +>a : any + +const p = a satisfies bleh; +>p : bleh +>a satisfies bleh : bleh +>a : any + diff --git a/tests/cases/compiler/satisfiesEmit.ts b/tests/cases/compiler/satisfiesEmit.ts new file mode 100644 index 0000000000000..bf2c6156e95ee --- /dev/null +++ b/tests/cases/compiler/satisfiesEmit.ts @@ -0,0 +1,3 @@ +// This import should not be elided in the emitted JS +import a = require("foo"); +const p = a satisfies bleh;