diff --git a/tsc/internal/checker/nodecopy.go b/tsc/internal/checker/nodecopy.go index 71ed761dcbdc8..d9abf422dba5e 100644 --- a/tsc/internal/checker/nodecopy.go +++ b/tsc/internal/checker/nodecopy.go @@ -294,7 +294,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 { @@ -302,7 +302,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() } } @@ -338,7 +338,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) { @@ -371,17 +371,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 new file mode 100644 index 0000000000000..3337d5192b527 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.js @@ -0,0 +1,198 @@ +//// [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 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; + }; +} + +export function qualifiedQuery(value: value) { + return function (value: value): typeof value.a { + return value.a; + }; +} + +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; + }; +} + +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 truthyAssertion(value) { + return function (value) { + if (!value) + throw value; + }; +} +export function query(value) { + return function (value, other) { + return value; + }; +} +export function qualifiedQuery(value) { + return function (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; + }; +} +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 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; +export declare function method(value: value): { + m(value: value_1): asserts value; +}; +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 new file mode 100644 index 0000000000000..0b5fc4711cef3 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.symbols @@ -0,0 +1,296 @@ +//// [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 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): 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)) +>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, 19, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 19, 28)) + + }; +} + +export function qualifiedQuery(value: value) { +>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, 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, 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, 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, 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, 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, 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, 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, 57, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 57, 28)) + + }; +} + +export function nested(value: value) { +>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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 81, 21), Decl(declarationEmitShadowedTypeParameterSharesParameterName.ts, 82, 13)) + + const result: { a: typeof value; b: value } = { a: value, b: x }; +>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, 83, 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..cdbfa2e198707 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitShadowedTypeParameterSharesParameterName.types @@ -0,0 +1,264 @@ +//// [tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts] //// + +=== declarationEmitShadowedTypeParameterSharesParameterName.ts === +export function predicate(value: value) { +>predicate : (value: value) => (value: value_1) => value 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 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 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 + + 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.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 + + }; +} + +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 + + 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 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 + + 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 +>value : value + + return function (value: value) { +>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 { +>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 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 +>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; } +>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: 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: 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: 1; 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: 1; 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..cdf83cf4beb58 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/declarationEmitShadowedTypeParameterSharesParameterName.ts @@ -0,0 +1,92 @@ +// @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 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; + }; +} + +export function qualifiedQuery(value: value) { + return function (value: value): typeof value.a { + return value.a; + }; +} + +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; + }; +} + +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; + }; +}