From 0b3e36ecd5ea7e0f589f28ca2d97caf35e1dd5b0 Mon Sep 17 00:00:00 2001 From: Mariana Castro Date: Sat, 10 Oct 2026 15:07:57 -0300 Subject: [PATCH 1/3] Add declaration emit test for type parameters sharing a parameter name --- ...hadowedTypeParameterSharesParameterName.js | 194 ++++++++++++++++ ...edTypeParameterSharesParameterName.symbols | 213 ++++++++++++++++++ ...owedTypeParameterSharesParameterName.types | 189 ++++++++++++++++ ...hadowedTypeParameterSharesParameterName.ts | 66 ++++++ 4 files changed, 662 insertions(+) create mode 100644 tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js create mode 100644 tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types create mode 100644 tsc/testdata/tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js new file mode 100644 index 0000000000000..f86c7a96795f6 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js @@ -0,0 +1,194 @@ +//// [tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts] //// + +//// [declarationEmitShadowedTypeParameterSharesParameterName.ts] +export function predicate(value: value) { + return function (value: value): value is value & string { + return typeof value === "string"; + }; +} + +export function assertion(value: value) { + return function (value: value): asserts value is value & string { + if (typeof value !== "string") throw value; + }; +} + +export function query(value: value) { + return function (value: value, other: typeof value): typeof value { + return value; + }; +} + +export function qualifiedQuery(value: value) { + return function (value: value): typeof value.a { + return value.a; + }; +} + +export function capturedPredicate(value: value) { + return function (value: value, value_1: unknown): value is value & string { + return typeof value === "string"; + }; +} + +export function capturedQuery(value: value) { + return function (value: value, value_1: number): typeof value { + return value; + }; +} + +export function nested(value: value) { + return function (value: value) { + return function (value: value): typeof value { + return value; + }; + }; +} + +export const arrow = (value: value) => (value: value): value is value & string => typeof value === "string"; + +export function method(value: value) { + return { + m(value: value): asserts value { + if (!value) throw value; + }, + }; +} + +export function local(value: value) { + return function (x: value) { + const value = 1; + const result: { a: typeof value; b: value } = { a: value, b: x }; + return result; + }; +} + + +//// [declarationEmitShadowedTypeParameterSharesParameterName.js] +export function predicate(value) { + return function (value) { + return typeof value === "string"; + }; +} +export function assertion(value) { + return function (value) { + if (typeof value !== "string") + throw value; + }; +} +export function query(value) { + return function (value, other) { + return value; + }; +} +export function qualifiedQuery(value) { + return function (value) { + return value.a; + }; +} +export function capturedPredicate(value) { + return function (value, value_1) { + return typeof value === "string"; + }; +} +export function capturedQuery(value) { + return function (value, value_1) { + return value; + }; +} +export function nested(value) { + return function (value) { + return function (value) { + return value; + }; + }; +} +export const arrow = (value) => (value) => typeof value === "string"; +export function method(value) { + return { + m(value) { + if (!value) + throw value; + }, + }; +} +export function local(value) { + return function (x) { + const value = 1; + const result = { a: value, b: x }; + return result; + }; +} + + +//// [declarationEmitShadowedTypeParameterSharesParameterName.d.ts] +export declare function predicate(value: value): (value: value_1) => value_1 is value_1 & string; +export declare function assertion(value: value): (value: value_1) => asserts value_1 is value_1 & string; +export declare function query(value: value): (value: value_1, other: typeof value_1) => typeof value_1; +export declare function qualifiedQuery(value: value): (value: value_1) => typeof value_1.a; +export declare function capturedPredicate(value: value): (value: value_1, value_1: unknown) => value_1 is value_1 & string; +export declare function capturedQuery(value: value): (value: value_1, value_1: number) => typeof value_1; +export declare function nested(value: value): (value: value_1) => (value: value_2) => typeof value_2; +export declare const arrow: (value: value) => (value: value_1) => value_1 is value_1 & string; +export declare function method(value: value): { + m(value: value_1): asserts value_1; +}; +export declare function local(value: value): (x: value_1) => { + a: typeof value_1; + b: value_1; +}; + + +//// [DtsFileErrors] + + +declarationEmitShadowedTypeParameterSharesParameterName.d.ts(1,86): error TS1225: Cannot find parameter 'value_1'. +declarationEmitShadowedTypeParameterSharesParameterName.d.ts(2,94): error TS1225: Cannot find parameter 'value_1'. +declarationEmitShadowedTypeParameterSharesParameterName.d.ts(3,93): error TS2693: 'value_1' only refers to a type, but is being used as a value here. +declarationEmitShadowedTypeParameterSharesParameterName.d.ts(3,112): error TS2693: 'value_1' only refers to a type, but is being used as a value here. +declarationEmitShadowedTypeParameterSharesParameterName.d.ts(6,30): error TS2693: 'value_1' only refers to a type, but is being used as a value here. +declarationEmitShadowedTypeParameterSharesParameterName.d.ts(9,119): error TS2693: 'value_2' only refers to a type, but is being used as a value here. +declarationEmitShadowedTypeParameterSharesParameterName.d.ts(10,83): error TS1225: Cannot find parameter 'value_1'. +declarationEmitShadowedTypeParameterSharesParameterName.d.ts(12,41): error TS1225: Cannot find parameter 'value_1'. +declarationEmitShadowedTypeParameterSharesParameterName.d.ts(15,15): error TS2693: 'value_1' only refers to a type, but is being used as a value here. + + +==== declarationEmitShadowedTypeParameterSharesParameterName.d.ts (9 errors) ==== + export declare function predicate(value: value): (value: value_1) => value_1 is value_1 & string; + ~~~~~~~ +!!! error TS1225: Cannot find parameter 'value_1'. + export declare function assertion(value: value): (value: value_1) => asserts value_1 is value_1 & string; + ~~~~~~~ +!!! error TS1225: Cannot find parameter 'value_1'. + export declare function query(value: value): (value: value_1, other: typeof value_1) => typeof value_1; + ~~~~~~~ +!!! error TS2693: 'value_1' only refers to a type, but is being used as a value here. + ~~~~~~~ +!!! error TS2693: 'value_1' only refers to a type, but is being used as a value here. + export declare function qualifiedQuery(value: value): (value: value_1) => typeof value_1.a; + ~~~~~~~ +!!! error TS2693: 'value_1' only refers to a type, but is being used as a value here. + export declare function capturedPredicate(value: value): (value: value_1, value_1: unknown) => value_1 is value_1 & string; + export declare function capturedQuery(value: value): (value: value_1, value_1: number) => typeof value_1; + export declare function nested(value: value): (value: value_1) => (value: value_2) => typeof value_2; + ~~~~~~~ +!!! error TS2693: 'value_2' only refers to a type, but is being used as a value here. + export declare const arrow: (value: value) => (value: value_1) => value_1 is value_1 & string; + ~~~~~~~ +!!! error TS1225: Cannot find parameter 'value_1'. + export declare function method(value: value): { + m(value: value_1): asserts value_1; + ~~~~~~~ +!!! error TS1225: Cannot find parameter 'value_1'. + }; + export declare function local(value: value): (x: value_1) => { + a: typeof value_1; + ~~~~~~~ +!!! error TS2693: 'value_1' only refers to a type, but is being used as a value here. + b: value_1; + }; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.symbols b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.symbols new file mode 100644 index 0000000000000..d45675efd9d86 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.symbols @@ -0,0 +1,213 @@ +//// [tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts] //// + +=== declarationEmitShadowedTypeParameterSharesParameterName.ts === +export function predicate(value: value) { +>predicate : Symbol(predicate, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 0, 0)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 0, 26), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 0, 33)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 0, 26), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 0, 33)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 0, 26), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 0, 33)) + + return function (value: value): value is value & string { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 1, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 1, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 1, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 1, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 1, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 1, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 1, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 1, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 1, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 1, 28)) + + return typeof value === "string"; +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 1, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 1, 28)) + + }; +} + +export function assertion(value: value) { +>assertion : Symbol(assertion, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 4, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 6, 26), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 6, 33)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 6, 26), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 6, 33)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 6, 26), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 6, 33)) + + return function (value: value): asserts value is value & string { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 28)) + + if (typeof value !== "string") throw value; +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 7, 28)) + + }; +} + +export function query(value: value) { +>query : Symbol(query, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 10, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 29)) + + return function (value: value, other: typeof value): typeof value { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) +>other : Symbol(other, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) + + return value; +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) + + }; +} + +export function qualifiedQuery(value: value) { +>qualifiedQuery : Symbol(qualifiedQuery, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 16, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 31), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 38)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 31), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 38)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 31), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 38)) + + return function (value: value): typeof value.a { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 50)) +>a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 36)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 50)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 50)) +>value.a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 36)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 50)) +>a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 36)) + + return value.a; +>value.a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 36)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 50)) +>a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 36)) + + }; +} + +export function capturedPredicate(value: value) { +>capturedPredicate : Symbol(capturedPredicate, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 22, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 34), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 34), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 34), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 41)) + + return function (value: value, value_1: unknown): value is value & string { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 28)) +>value_1 : Symbol(value_1, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 28)) + + return typeof value === "string"; +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 28)) + + }; +} + +export function capturedQuery(value: value) { +>capturedQuery : Symbol(capturedQuery, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 28, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 30), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 37)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 30), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 37)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 30), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 37)) + + return function (value: value, value_1: number): typeof value { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 28)) +>value_1 : Symbol(value_1, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 28)) + + return value; +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 28)) + + }; +} + +export function nested(value: value) { +>nested : Symbol(nested, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 34, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 30)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 30)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 30)) + + return function (value: value) { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 37, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 37, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 37, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 37, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 37, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 37, 28)) + + return function (value: value): typeof value { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 32)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 32)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 32)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 32)) + + return value; +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 32)) + + }; + }; +} + +export const arrow = (value: value) => (value: value): value is value & string => typeof value === "string"; +>arrow : Symbol(arrow, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 12)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 54)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 54)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 54)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 54)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 54)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 54)) + +export function method(value: value) { +>method : Symbol(method, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 122)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 46, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 46, 30)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 46, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 46, 30)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 46, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 46, 30)) + + return { + m(value: value): asserts value { +>m : Symbol(m, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 47, 12)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 17)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 17)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 17)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 17)) + + if (!value) throw value; +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 17)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 17)) + + }, + }; +} + +export function local(value: value) { +>local : Symbol(local, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 52, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 29)) + + return function (x: value) { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 13)) +>x : Symbol(x, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 13)) + + const value = 1; +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 13)) + + const result: { a: typeof value; b: value } = { a: value, b: x }; +>result : Symbol(result, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 13)) +>a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 23)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 13)) +>b : Symbol(b, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 40)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 13)) +>a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 55)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 13)) +>b : Symbol(b, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 65)) +>x : Symbol(x, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 28)) + + return result; +>result : Symbol(result, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 13)) + + }; +} + diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types new file mode 100644 index 0000000000000..d965a4db470dd --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types @@ -0,0 +1,189 @@ +//// [tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts] //// + +=== declarationEmitShadowedTypeParameterSharesParameterName.ts === +export function predicate(value: value) { +>predicate : (value: value) => (value: value_1) => value_1 is value_1 & string +>value : value + + return function (value: value): value is value & string { +>function (value: value): value is value & string { return typeof value === "string"; } : (value: value) => value is value & string +>value : value + + return typeof value === "string"; +>typeof value === "string" : boolean +>typeof value : "bigint" | "boolean" | "function" | "number" | "object" | "string" | "symbol" | "undefined" +>value : value +>"string" : "string" + + }; +} + +export function assertion(value: value) { +>assertion : (value: value) => (value: value_1) => asserts value_1 is value_1 & string +>value : value + + return function (value: value): asserts value is value & string { +>function (value: value): asserts value is value & string { if (typeof value !== "string") throw value; } : (value: value) => asserts value is value & string +>value : value + + if (typeof value !== "string") throw value; +>typeof value !== "string" : boolean +>typeof value : "bigint" | "boolean" | "function" | "number" | "object" | "string" | "symbol" | "undefined" +>value : value +>"string" : "string" +>value : value + + }; +} + +export function query(value: value) { +>query : (value: value) => (value: value_1, other: typeof value_1) => typeof value_1 +>value : value + + return function (value: value, other: typeof value): typeof value { +>function (value: value, other: typeof value): typeof value { return value; } : (value: value, other: typeof value) => typeof value +>value : value +>other : value +>value : value +>value : value + + return value; +>value : value + + }; +} + +export function qualifiedQuery(value: value) { +>qualifiedQuery : (value: value) => (value: value_1) => typeof value_1.a +>value : value + + return function (value: value): typeof value.a { +>function (value: value): typeof value.a { return value.a; } : (value: value) => typeof value.a +>a : number +>value : value +>value.a : number +>value : value +>a : number + + return value.a; +>value.a : number +>value : value +>a : number + + }; +} + +export function capturedPredicate(value: value) { +>capturedPredicate : (value: value) => (value: value_1, value_1: unknown) => value_1 is value_1 & string +>value : value + + return function (value: value, value_1: unknown): value is value & string { +>function (value: value, value_1: unknown): value is value & string { return typeof value === "string"; } : (value: value, value_1: unknown) => value is value & string +>value : value +>value_1 : unknown + + return typeof value === "string"; +>typeof value === "string" : boolean +>typeof value : "bigint" | "boolean" | "function" | "number" | "object" | "string" | "symbol" | "undefined" +>value : value +>"string" : "string" + + }; +} + +export function capturedQuery(value: value) { +>capturedQuery : (value: value) => (value: value_1, value_1: number) => typeof value_1 +>value : value + + return function (value: value, value_1: number): typeof value { +>function (value: value, value_1: number): typeof value { return value; } : (value: value, value_1: number) => typeof value +>value : value +>value_1 : number +>value : value + + return value; +>value : value + + }; +} + +export function nested(value: value) { +>nested : (value: value) => (value: value_1) => (value: value_2) => typeof value_2 +>value : value + + return function (value: value) { +>function (value: value) { return function (value: value): typeof value { return value; }; } : (value: value) => (value: value_1) => typeof value_1 +>value : value + + return function (value: value): typeof value { +>function (value: value): typeof value { return value; } : (value: value) => typeof value +>value : value +>value : value + + return value; +>value : value + + }; + }; +} + +export const arrow = (value: value) => (value: value): value is value & string => typeof value === "string"; +>arrow : (value: value) => (value: value_1) => value_1 is value_1 & string +>(value: value) => (value: value): value is value & string => typeof value === "string" : (value: value) => (value: value_1) => value_1 is value_1 & string +>value : value +>(value: value): value is value & string => typeof value === "string" : (value: value) => value is value & string +>value : value +>typeof value === "string" : boolean +>typeof value : "bigint" | "boolean" | "function" | "number" | "object" | "string" | "symbol" | "undefined" +>value : value +>"string" : "string" + +export function method(value: value) { +>method : (value: value) => { m(value: value_1): asserts value_1; } +>value : value + + return { +>{ m(value: value): asserts value { if (!value) throw value; }, } : { m(value: value): asserts value; } + + m(value: value): asserts value { +>m : (value: value) => asserts value +>value : value + + if (!value) throw value; +>!value : boolean +>value : value +>value : value + + }, + }; +} + +export function local(value: value) { +>local : (value: value) => (x: value_1) => { a: typeof value_1; b: value_1; } +>value : value + + return function (x: value) { +>function (x: value) { const value = 1; const result: { a: typeof value; b: value } = { a: value, b: x }; return result; } : (x: value_1) => { a: typeof value_1; b: value_1; } +>x : value + + const value = 1; +>value : 1 +>1 : 1 + + const result: { a: typeof value; b: value } = { a: value, b: x }; +>result : { a: typeof value; b: value; } +>a : 1 +>value : 1 +>b : value +>{ a: value, b: x } : { a: 1; b: value; } +>a : 1 +>value : 1 +>b : value +>x : value + + return result; +>result : { a: typeof value; b: value; } + + }; +} + diff --git a/tsc/testdata/tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts b/tsc/testdata/tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts new file mode 100644 index 0000000000000..a078bad337129 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts @@ -0,0 +1,66 @@ +// @target: esnext +// @module: esnext +// @declaration: true +// @strict: true + +export function predicate(value: value) { + return function (value: value): value is value & string { + return typeof value === "string"; + }; +} + +export function assertion(value: value) { + return function (value: value): asserts value is value & string { + if (typeof value !== "string") throw value; + }; +} + +export function query(value: value) { + return function (value: value, other: typeof value): typeof value { + return value; + }; +} + +export function qualifiedQuery(value: value) { + return function (value: value): typeof value.a { + return value.a; + }; +} + +export function capturedPredicate(value: value) { + return function (value: value, value_1: unknown): value is value & string { + return typeof value === "string"; + }; +} + +export function capturedQuery(value: value) { + return function (value: value, value_1: number): typeof value { + return value; + }; +} + +export function nested(value: value) { + return function (value: value) { + return function (value: value): typeof value { + return value; + }; + }; +} + +export const arrow = (value: value) => (value: value): value is value & string => typeof value === "string"; + +export function method(value: value) { + return { + m(value: value): asserts value { + if (!value) throw value; + }, + }; +} + +export function local(value: value) { + return function (x: value) { + const value = 1; + const result: { a: typeof value; b: value } = { a: value, b: x }; + return result; + }; +} From 7935fff596d5ed92172d83d29a26db3a46fa87ec Mon Sep 17 00:00:00 2001 From: Mariana Castro Date: Sat, 10 Oct 2026 15:21:05 -0300 Subject: [PATCH 2/3] Fix declaration emit renaming value references to shadowed type parameters A type parameter and a parameter with the same name share one symbol. When reusing nodes, only treat that symbol as a type parameter if the reference is in a type parameter meaning, so predicate targets and `typeof` operands keep the parameter's name and value references go through the regular accessibility check. --- tsc/internal/checker/nodecopy.go | 12 +-- ...hadowedTypeParameterSharesParameterName.js | 73 +++---------------- ...owedTypeParameterSharesParameterName.types | 30 ++++---- 3 files changed, 31 insertions(+), 84 deletions(-) diff --git a/tsc/internal/checker/nodecopy.go b/tsc/internal/checker/nodecopy.go index c098604800dc0..57372f2adaa6b 100644 --- a/tsc/internal/checker/nodecopy.go +++ b/tsc/internal/checker/nodecopy.go @@ -290,7 +290,7 @@ func getExistingNodeTreeVisitor(b *NodeBuilderImpl, bound *recoveryBoundary) *as // instead of re-closing-over all of these each time we need a visitor. In theory the compiler could handle this, but in practice closure inlining hasn't been reliable var visitor *ast.NodeVisitor // note: also handles renaming type parameters renamed within the current context - attachSymbolToLeftmostIdentifier := func(leftmost *ast.Node, node *ast.Node, sym *ast.Symbol) *ast.Node { + attachSymbolToLeftmostIdentifier := func(leftmost *ast.Node, node *ast.Node, sym *ast.Symbol, meaning ast.SymbolFlags) *ast.Node { var vis *ast.NodeVisitor visitorFunc := func(node *ast.Node) *ast.Node { if node == leftmost { @@ -298,7 +298,7 @@ func getExistingNodeTreeVisitor(b *NodeBuilderImpl, bound *recoveryBoundary) *as var name *ast.Node if sym != nil { type_ = b.ch.getDeclaredTypeOfSymbol(sym) - if sym.Flags()&ast.SymbolFlagsTypeParameter != 0 { + if sym.Flags()&meaning&ast.SymbolFlagsTypeParameter != 0 { name = b.typeParameterToName(type_).AsNode() } } @@ -334,7 +334,7 @@ func getExistingNodeTreeVisitor(b *NodeBuilderImpl, bound *recoveryBoundary) *as introducesError = true b.ctx.tracker.ReportInaccessibleThisError() } - return introducesError, attachSymbolToLeftmostIdentifier(leftmost, node, sym), nil + return introducesError, attachSymbolToLeftmostIdentifier(leftmost, node, sym, meaning), nil } sym = b.ch.resolveEntityName(leftmost, meaning, true, true, nil) if b.ctx.enclosingDeclaration != nil && !(sym != nil && sym.Flags()&ast.SymbolFlagsTypeParameter != 0) { @@ -367,17 +367,17 @@ func getExistingNodeTreeVisitor(b *NodeBuilderImpl, bound *recoveryBoundary) *as // If a parameter is resolvable in the current context it is also visible, so no need to go to symbol accesibility if sym.Flags()&ast.SymbolFlagsFunctionScopedVariable != 0 && sym.ValueDeclaration() != nil { if ast.IsPartOfParameterDeclaration(sym.ValueDeclaration()) || ast.IsJSDocParameterTag(sym.ValueDeclaration()) { - return introducesError, attachSymbolToLeftmostIdentifier(leftmost, node, sym), nil + return introducesError, attachSymbolToLeftmostIdentifier(leftmost, node, sym, meaning), nil } } - if sym.Flags()&ast.SymbolFlagsTypeParameter == 0 /* Type parameters are visible in the current context if they are are resolvable */ && !ast.IsDeclarationName(node) && + if sym.Flags()&meaning&ast.SymbolFlagsTypeParameter == 0 /* Type parameters are visible in the current context if they are are resolvable */ && !ast.IsDeclarationName(node) && b.ch.IsSymbolAccessible(sym, enclosingDeclaration, meaning, false).Accessibility != printer.SymbolAccessibilityAccessible { b.ctx.tracker.ReportInferenceFallback(node) introducesError = true } else { b.ctx.tracker.TrackSymbol(sym, enclosingDeclaration, meaning) } - return introducesError, attachSymbolToLeftmostIdentifier(leftmost, node, sym), nil + return introducesError, attachSymbolToLeftmostIdentifier(leftmost, node, sym, meaning), nil } return introducesError, b.setTextRange(b.f.DeepCloneNode(node), node), nil } diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js index f86c7a96795f6..f3b2ba74e400b 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js @@ -122,73 +122,20 @@ export function local(value) { //// [declarationEmitShadowedTypeParameterSharesParameterName.d.ts] -export declare function predicate(value: value): (value: value_1) => value_1 is value_1 & string; -export declare function assertion(value: value): (value: value_1) => asserts value_1 is value_1 & string; -export declare function query(value: value): (value: value_1, other: typeof value_1) => typeof value_1; +export declare function predicate(value: value): (value: value_1) => value is value_1 & string; +export declare function assertion(value: value): (value: value_1) => asserts value is value_1 & string; +export declare function query(value: value): (value: value_1, other: typeof value) => typeof value; export declare function qualifiedQuery(value: value): (value: value_1) => typeof value_1.a; -export declare function capturedPredicate(value: value): (value: value_1, value_1: unknown) => value_1 is value_1 & string; -export declare function capturedQuery(value: value): (value: value_1, value_1: number) => typeof value_1; -export declare function nested(value: value): (value: value_1) => (value: value_2) => typeof value_2; -export declare const arrow: (value: value) => (value: value_1) => value_1 is value_1 & string; +}>(value: value_1) => typeof value.a; +export declare function capturedPredicate(value: value): (value: value_1, value_1: unknown) => value is value_1 & string; +export declare function capturedQuery(value: value): (value: value_1, value_1: number) => typeof value; +export declare function nested(value: value): (value: value_1) => (value: value_2) => typeof value; +export declare const arrow: (value: value) => (value: value_1) => value is value_1 & string; export declare function method(value: value): { - m(value: value_1): asserts value_1; + m(value: value_1): asserts value; }; export declare function local(value: value): (x: value_1) => { - a: typeof value_1; + a: 1; b: value_1; }; - - -//// [DtsFileErrors] - - -declarationEmitShadowedTypeParameterSharesParameterName.d.ts(1,86): error TS1225: Cannot find parameter 'value_1'. -declarationEmitShadowedTypeParameterSharesParameterName.d.ts(2,94): error TS1225: Cannot find parameter 'value_1'. -declarationEmitShadowedTypeParameterSharesParameterName.d.ts(3,93): error TS2693: 'value_1' only refers to a type, but is being used as a value here. -declarationEmitShadowedTypeParameterSharesParameterName.d.ts(3,112): error TS2693: 'value_1' only refers to a type, but is being used as a value here. -declarationEmitShadowedTypeParameterSharesParameterName.d.ts(6,30): error TS2693: 'value_1' only refers to a type, but is being used as a value here. -declarationEmitShadowedTypeParameterSharesParameterName.d.ts(9,119): error TS2693: 'value_2' only refers to a type, but is being used as a value here. -declarationEmitShadowedTypeParameterSharesParameterName.d.ts(10,83): error TS1225: Cannot find parameter 'value_1'. -declarationEmitShadowedTypeParameterSharesParameterName.d.ts(12,41): error TS1225: Cannot find parameter 'value_1'. -declarationEmitShadowedTypeParameterSharesParameterName.d.ts(15,15): error TS2693: 'value_1' only refers to a type, but is being used as a value here. - - -==== declarationEmitShadowedTypeParameterSharesParameterName.d.ts (9 errors) ==== - export declare function predicate(value: value): (value: value_1) => value_1 is value_1 & string; - ~~~~~~~ -!!! error TS1225: Cannot find parameter 'value_1'. - export declare function assertion(value: value): (value: value_1) => asserts value_1 is value_1 & string; - ~~~~~~~ -!!! error TS1225: Cannot find parameter 'value_1'. - export declare function query(value: value): (value: value_1, other: typeof value_1) => typeof value_1; - ~~~~~~~ -!!! error TS2693: 'value_1' only refers to a type, but is being used as a value here. - ~~~~~~~ -!!! error TS2693: 'value_1' only refers to a type, but is being used as a value here. - export declare function qualifiedQuery(value: value): (value: value_1) => typeof value_1.a; - ~~~~~~~ -!!! error TS2693: 'value_1' only refers to a type, but is being used as a value here. - export declare function capturedPredicate(value: value): (value: value_1, value_1: unknown) => value_1 is value_1 & string; - export declare function capturedQuery(value: value): (value: value_1, value_1: number) => typeof value_1; - export declare function nested(value: value): (value: value_1) => (value: value_2) => typeof value_2; - ~~~~~~~ -!!! error TS2693: 'value_2' only refers to a type, but is being used as a value here. - export declare const arrow: (value: value) => (value: value_1) => value_1 is value_1 & string; - ~~~~~~~ -!!! error TS1225: Cannot find parameter 'value_1'. - export declare function method(value: value): { - m(value: value_1): asserts value_1; - ~~~~~~~ -!!! error TS1225: Cannot find parameter 'value_1'. - }; - export declare function local(value: value): (x: value_1) => { - a: typeof value_1; - ~~~~~~~ -!!! error TS2693: 'value_1' only refers to a type, but is being used as a value here. - b: value_1; - }; - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types index d965a4db470dd..8c22b72320734 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types @@ -2,7 +2,7 @@ === declarationEmitShadowedTypeParameterSharesParameterName.ts === export function predicate(value: value) { ->predicate : (value: value) => (value: value_1) => value_1 is value_1 & string +>predicate : (value: value) => (value: value_1) => value is value_1 & string >value : value return function (value: value): value is value & string { @@ -19,7 +19,7 @@ export function predicate(value: value) { } export function assertion(value: value) { ->assertion : (value: value) => (value: value_1) => asserts value_1 is value_1 & string +>assertion : (value: value) => (value: value_1) => asserts value is value_1 & string >value : value return function (value: value): asserts value is value & string { @@ -37,7 +37,7 @@ export function assertion(value: value) { } export function query(value: value) { ->query : (value: value) => (value: value_1, other: typeof value_1) => typeof value_1 +>query : (value: value) => (value: value_1, other: typeof value) => typeof value >value : value return function (value: value, other: typeof value): typeof value { @@ -54,7 +54,7 @@ export function query(value: value) { } export function qualifiedQuery(value: value) { ->qualifiedQuery : (value: value) => (value: value_1) => typeof value_1.a +>qualifiedQuery : (value: value) => (value: value_1) => typeof value.a >value : value return function (value: value): typeof value.a { @@ -74,7 +74,7 @@ export function qualifiedQuery(value: value) { } export function capturedPredicate(value: value) { ->capturedPredicate : (value: value) => (value: value_1, value_1: unknown) => value_1 is value_1 & string +>capturedPredicate : (value: value) => (value: value_1, value_1: unknown) => value is value_1 & string >value : value return function (value: value, value_1: unknown): value is value & string { @@ -92,7 +92,7 @@ export function capturedPredicate(value: value) { } export function capturedQuery(value: value) { ->capturedQuery : (value: value) => (value: value_1, value_1: number) => typeof value_1 +>capturedQuery : (value: value) => (value: value_1, value_1: number) => typeof value >value : value return function (value: value, value_1: number): typeof value { @@ -108,11 +108,11 @@ export function capturedQuery(value: value) { } export function nested(value: value) { ->nested : (value: value) => (value: value_1) => (value: value_2) => typeof value_2 +>nested : (value: value) => (value: value_1) => (value: value_2) => typeof value >value : value return function (value: value) { ->function (value: value) { return function (value: value): typeof value { return value; }; } : (value: value) => (value: value_1) => typeof value_1 +>function (value: value) { return function (value: value): typeof value { return value; }; } : (value: value) => (value: value_1) => typeof value >value : value return function (value: value): typeof value { @@ -128,8 +128,8 @@ export function nested(value: value) { } export const arrow = (value: value) => (value: value): value is value & string => typeof value === "string"; ->arrow : (value: value) => (value: value_1) => value_1 is value_1 & string ->(value: value) => (value: value): value is value & string => typeof value === "string" : (value: value) => (value: value_1) => value_1 is value_1 & string +>arrow : (value: value) => (value: value_1) => value is value_1 & string +>(value: value) => (value: value): value is value & string => typeof value === "string" : (value: value) => (value: value_1) => value is value_1 & string >value : value >(value: value): value is value & string => typeof value === "string" : (value: value) => value is value & string >value : value @@ -139,7 +139,7 @@ export const arrow = (value: value) => (value: value): value is va >"string" : "string" export function method(value: value) { ->method : (value: value) => { m(value: value_1): asserts value_1; } +>method : (value: value) => { m(value: value_1): asserts value; } >value : value return { @@ -159,11 +159,11 @@ export function method(value: value) { } export function local(value: value) { ->local : (value: value) => (x: value_1) => { a: typeof value_1; b: value_1; } +>local : (value: value) => (x: value_1) => { a: 1; b: value_1; } >value : value return function (x: value) { ->function (x: value) { const value = 1; const result: { a: typeof value; b: value } = { a: value, b: x }; return result; } : (x: value_1) => { a: typeof value_1; b: value_1; } +>function (x: value) { const value = 1; const result: { a: typeof value; b: value } = { a: value, b: x }; return result; } : (x: value_1) => { a: 1; b: value_1; } >x : value const value = 1; @@ -171,7 +171,7 @@ export function local(value: value) { >1 : 1 const result: { a: typeof value; b: value } = { a: value, b: x }; ->result : { a: typeof value; b: value; } +>result : { a: 1; b: value; } >a : 1 >value : 1 >b : value @@ -182,7 +182,7 @@ export function local(value: value) { >x : value return result; ->result : { a: typeof value; b: value; } +>result : { a: 1; b: value; } }; } From 41fea1635b48e5d335b6d16d7197168fac2ae282 Mon Sep 17 00:00:00 2001 From: Mariana Castro Date: Sat, 24 Oct 2026 10:37:55 -0300 Subject: [PATCH 3/3] Cover more value references to shadowed type parameters in declaration emit tests Add plain and captured assertion predicates and a computed property name whose expression refers to a parameter sharing its name with a shadowed type parameter. --- ...hadowedTypeParameterSharesParameterName.js | 57 ++++ ...edTypeParameterSharesParameterName.symbols | 271 ++++++++++++------ ...owedTypeParameterSharesParameterName.types | 75 +++++ ...hadowedTypeParameterSharesParameterName.ts | 26 ++ 4 files changed, 335 insertions(+), 94 deletions(-) diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js index f3b2ba74e400b..3337d5192b527 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js @@ -13,6 +13,12 @@ export function assertion(value: value) { }; } +export function truthyAssertion(value: value) { + return function (value: value): asserts value { + if (!value) throw value; + }; +} + export function query(value: value) { return function (value: value, other: typeof value): typeof value { return value; @@ -25,12 +31,32 @@ export function qualifiedQuery(value: value) { }; } +declare const key: unique symbol; + +export function computed(value: value) { + return function (value: typeof key): { [value]: number } { + return { [value]: 1 }; + }; +} + export function capturedPredicate(value: value) { return function (value: value, value_1: unknown): value is value & string { return typeof value === "string"; }; } +export function capturedAssertion(value: value) { + return function (value: value, value_1: unknown): asserts value is value & string { + if (typeof value !== "string") throw value; + }; +} + +export function capturedTruthyAssertion(value: value) { + return function (value: value, value_1: unknown): asserts value { + if (!value) throw value; + }; +} + export function capturedQuery(value: value) { return function (value: value, value_1: number): typeof value { return value; @@ -76,6 +102,12 @@ export function assertion(value) { throw value; }; } +export function truthyAssertion(value) { + return function (value) { + if (!value) + throw value; + }; +} export function query(value) { return function (value, other) { return value; @@ -86,11 +118,28 @@ export function qualifiedQuery(value) { return value.a; }; } +export function computed(value) { + return function (value) { + return { [value]: 1 }; + }; +} export function capturedPredicate(value) { return function (value, value_1) { return typeof value === "string"; }; } +export function capturedAssertion(value) { + return function (value, value_1) { + if (typeof value !== "string") + throw value; + }; +} +export function capturedTruthyAssertion(value) { + return function (value, value_1) { + if (!value) + throw value; + }; +} export function capturedQuery(value) { return function (value, value_1) { return value; @@ -124,11 +173,18 @@ export function local(value) { //// [declarationEmitShadowedTypeParameterSharesParameterName.d.ts] export declare function predicate(value: value): (value: value_1) => value is value_1 & string; export declare function assertion(value: value): (value: value_1) => asserts value is value_1 & string; +export declare function truthyAssertion(value: value): (value: value_1) => asserts value; export declare function query(value: value): (value: value_1, other: typeof value) => typeof value; export declare function qualifiedQuery(value: value): (value: value_1) => typeof value.a; +declare const key: unique symbol; +export declare function computed(value: value): (value: typeof key) => { + [value]: number; +}; export declare function capturedPredicate(value: value): (value: value_1, value_1: unknown) => value is value_1 & string; +export declare function capturedAssertion(value: value): (value: value_1, value_1: unknown) => asserts value is value_1 & string; +export declare function capturedTruthyAssertion(value: value): (value: value_1, value_1: unknown) => asserts value; export declare function capturedQuery(value: value): (value: value_1, value_1: number) => typeof value; export declare function nested(value: value): (value: value_1) => (value: value_2) => typeof value; export declare const arrow: (value: value) => (value: value_1) => value is value_1 & string; @@ -139,3 +195,4 @@ export declare function local(value: value): (x: value_1) => { a: 1; b: value_1; }; +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.symbols b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.symbols index d45675efd9d86..0b5fc4711cef3 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.symbols +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.symbols @@ -40,173 +40,256 @@ export function assertion(value: value) { }; } -export function query(value: value) { ->query : Symbol(query, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 10, 1)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 29)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 29)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 29)) +export function truthyAssertion(value: value) { +>truthyAssertion : Symbol(truthyAssertion, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 10, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 32), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 39)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 32), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 39)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 32), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 12, 39)) - return function (value: value, other: typeof value): typeof value { + return function (value: value): asserts value { >value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) >value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) >value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) ->other : Symbol(other, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) + + if (!value) throw value; >value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) >value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) + }; +} + +export function query(value: value) { +>query : Symbol(query, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 16, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 29)) + + return function (value: value, other: typeof value): typeof value { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 28)) +>other : Symbol(other, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 28)) + return value; ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 13, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 28)) }; } export function qualifiedQuery(value: value) { ->qualifiedQuery : Symbol(qualifiedQuery, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 16, 1)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 31), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 38)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 31), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 38)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 31), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 18, 38)) +>qualifiedQuery : Symbol(qualifiedQuery, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 22, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 31), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 38)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 31), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 38)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 31), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 38)) return function (value: value): typeof value.a { ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 50)) ->a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 36)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 50)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 50)) ->value.a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 36)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 50)) ->a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 36)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 50)) +>a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 36)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 50)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 50)) +>value.a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 36)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 50)) +>a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 36)) return value.a; ->value.a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 36)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 50)) ->a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 36)) +>value.a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 36)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 50)) +>a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 36)) + + }; +} + +declare const key: unique symbol; +>key : Symbol(key, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 13)) + +export function computed(value: value) { +>computed : Symbol(computed, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 33)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 32, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 32, 32)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 32, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 32, 32)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 32, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 32, 32)) + + return function (value: typeof key): { [value]: number } { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 33, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 33, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 33, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 33, 28)) +>key : Symbol(key, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 13)) +>[value] : Symbol([value], Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 33, 49)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 33, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 33, 28)) + + return { [value]: 1 }; +>[value] : Symbol([value], Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 34, 16)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 33, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 33, 28)) }; } export function capturedPredicate(value: value) { ->capturedPredicate : Symbol(capturedPredicate, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 22, 1)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 34), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 41)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 34), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 41)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 34), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 24, 41)) +>capturedPredicate : Symbol(capturedPredicate, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 34), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 34), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 34), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 41)) return function (value: value, value_1: unknown): value is value & string { ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 28)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 28)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 28)) ->value_1 : Symbol(value_1, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 41)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 28)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 28)) +>value_1 : Symbol(value_1, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 28)) return typeof value === "string"; ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 25, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 39, 28)) + + }; +} + +export function capturedAssertion(value: value) { +>capturedAssertion : Symbol(capturedAssertion, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 42, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 34), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 34), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 34), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 41)) + + return function (value: value, value_1: unknown): asserts value is value & string { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 28)) +>value_1 : Symbol(value_1, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 28)) + + if (typeof value !== "string") throw value; +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 45, 28)) + + }; +} + +export function capturedTruthyAssertion(value: value) { +>capturedTruthyAssertion : Symbol(capturedTruthyAssertion, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 50, 40), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 50, 47)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 50, 40), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 50, 47)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 50, 40), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 50, 47)) + + return function (value: value, value_1: unknown): asserts value { +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 28)) +>value_1 : Symbol(value_1, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 28)) + + if (!value) throw value; +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 51, 28)) }; } export function capturedQuery(value: value) { ->capturedQuery : Symbol(capturedQuery, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 28, 1)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 30), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 37)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 30), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 37)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 30), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 30, 37)) +>capturedQuery : Symbol(capturedQuery, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 30), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 37)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 30), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 37)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 30), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 37)) return function (value: value, value_1: number): typeof value { ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 28)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 28)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 28)) ->value_1 : Symbol(value_1, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 41)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 28)) +>value_1 : Symbol(value_1, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 41)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 28)) return value; ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 31, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 28)) }; } export function nested(value: value) { ->nested : Symbol(nested, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 34, 1)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 30)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 30)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 36, 30)) +>nested : Symbol(nested, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 60, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 62, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 62, 30)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 62, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 62, 30)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 62, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 62, 30)) return function (value: value) { ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 37, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 37, 28)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 37, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 37, 28)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 37, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 37, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 63, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 63, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 63, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 63, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 63, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 63, 28)) return function (value: value): typeof value { ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 32)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 32)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 32)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 32)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 64, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 64, 32)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 64, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 64, 32)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 64, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 64, 32)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 64, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 64, 32)) return value; ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 38, 32)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 64, 25), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 64, 32)) }; }; } export const arrow = (value: value) => (value: value): value is value & string => typeof value === "string"; ->arrow : Symbol(arrow, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 12)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 29)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 29)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 29)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 54)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 54)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 54)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 54)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 54)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 54)) +>arrow : Symbol(arrow, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 12)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 54)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 54)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 54)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 54)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 54)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 47), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 54)) export function method(value: value) { ->method : Symbol(method, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 44, 122)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 46, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 46, 30)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 46, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 46, 30)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 46, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 46, 30)) +>method : Symbol(method, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 70, 122)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 72, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 72, 30)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 72, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 72, 30)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 72, 23), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 72, 30)) return { m(value: value): asserts value { ->m : Symbol(m, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 47, 12)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 17)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 17)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 17)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 17)) +>m : Symbol(m, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 73, 12)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 74, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 74, 17)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 74, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 74, 17)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 74, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 74, 17)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 74, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 74, 17)) if (!value) throw value; ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 17)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 48, 17)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 74, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 74, 17)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 74, 10), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 74, 17)) }, }; } export function local(value: value) { ->local : Symbol(local, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 52, 1)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 29)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 29)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 54, 29)) +>local : Symbol(local, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 78, 1)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 80, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 80, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 80, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 80, 29)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 80, 22), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 80, 29)) return function (x: value) { ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 13)) ->x : Symbol(x, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 28)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 13)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 81, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 82, 13)) +>x : Symbol(x, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 81, 28)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 81, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 82, 13)) const value = 1; ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 13)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 81, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 82, 13)) const result: { a: typeof value; b: value } = { a: value, b: x }; ->result : Symbol(result, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 13)) ->a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 23)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 13)) ->b : Symbol(b, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 40)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 13)) ->a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 55)) ->value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 56, 13)) ->b : Symbol(b, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 65)) ->x : Symbol(x, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 55, 28)) +>result : Symbol(result, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 83, 13)) +>a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 83, 23)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 81, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 82, 13)) +>b : Symbol(b, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 83, 40)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 81, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 82, 13)) +>a : Symbol(a, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 83, 55)) +>value : Symbol(value, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 81, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 82, 13)) +>b : Symbol(b, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 83, 65)) +>x : Symbol(x, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 81, 28)) return result; ->result : Symbol(result, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 13)) +>result : Symbol(result, Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 83, 13)) }; } diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types index 8c22b72320734..cdbfa2e198707 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types @@ -36,6 +36,22 @@ export function assertion(value: value) { }; } +export function truthyAssertion(value: value) { +>truthyAssertion : (value: value) => (value: value_1) => asserts value +>value : value + + return function (value: value): asserts value { +>function (value: value): asserts value { if (!value) throw value; } : (value: value) => asserts value +>value : value + + if (!value) throw value; +>!value : boolean +>value : value +>value : value + + }; +} + export function query(value: value) { >query : (value: value) => (value: value_1, other: typeof value) => typeof value >value : value @@ -73,6 +89,29 @@ export function qualifiedQuery(value: value) { }; } +declare const key: unique symbol; +>key : unique symbol + +export function computed(value: value) { +>computed : (value: value) => (value: typeof key) => { [value]: number; } +>value : value + + return function (value: typeof key): { [value]: number } { +>function (value: typeof key): { [value]: number } { return { [value]: 1 }; } : (value: typeof key) => { [value]: number; } +>value : unique symbol +>key : unique symbol +>[value] : number +>value : unique symbol + + return { [value]: 1 }; +>{ [value]: 1 } : { [key]: number; } +>[value] : number +>value : unique symbol +>1 : 1 + + }; +} + export function capturedPredicate(value: value) { >capturedPredicate : (value: value) => (value: value_1, value_1: unknown) => value is value_1 & string >value : value @@ -91,6 +130,42 @@ export function capturedPredicate(value: value) { }; } +export function capturedAssertion(value: value) { +>capturedAssertion : (value: value) => (value: value_1, value_1: unknown) => asserts value is value_1 & string +>value : value + + return function (value: value, value_1: unknown): asserts value is value & string { +>function (value: value, value_1: unknown): asserts value is value & string { if (typeof value !== "string") throw value; } : (value: value, value_1: unknown) => asserts value is value & string +>value : value +>value_1 : unknown + + if (typeof value !== "string") throw value; +>typeof value !== "string" : boolean +>typeof value : "bigint" | "boolean" | "function" | "number" | "object" | "string" | "symbol" | "undefined" +>value : value +>"string" : "string" +>value : value + + }; +} + +export function capturedTruthyAssertion(value: value) { +>capturedTruthyAssertion : (value: value) => (value: value_1, value_1: unknown) => asserts value +>value : value + + return function (value: value, value_1: unknown): asserts value { +>function (value: value, value_1: unknown): asserts value { if (!value) throw value; } : (value: value, value_1: unknown) => asserts value +>value : value +>value_1 : unknown + + if (!value) throw value; +>!value : boolean +>value : value +>value : value + + }; +} + export function capturedQuery(value: value) { >capturedQuery : (value: value) => (value: value_1, value_1: number) => typeof value >value : value diff --git a/tsc/testdata/tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts b/tsc/testdata/tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts index a078bad337129..cdf83cf4beb58 100644 --- a/tsc/testdata/tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts +++ b/tsc/testdata/tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts @@ -15,6 +15,12 @@ export function assertion(value: value) { }; } +export function truthyAssertion(value: value) { + return function (value: value): asserts value { + if (!value) throw value; + }; +} + export function query(value: value) { return function (value: value, other: typeof value): typeof value { return value; @@ -27,12 +33,32 @@ export function qualifiedQuery(value: value) { }; } +declare const key: unique symbol; + +export function computed(value: value) { + return function (value: typeof key): { [value]: number } { + return { [value]: 1 }; + }; +} + export function capturedPredicate(value: value) { return function (value: value, value_1: unknown): value is value & string { return typeof value === "string"; }; } +export function capturedAssertion(value: value) { + return function (value: value, value_1: unknown): asserts value is value & string { + if (typeof value !== "string") throw value; + }; +} + +export function capturedTruthyAssertion(value: value) { + return function (value: value, value_1: unknown): asserts value { + if (!value) throw value; + }; +} + export function capturedQuery(value: value) { return function (value: value, value_1: number): typeof value { return value;