diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index 69fa41b207187..f9e539770dcdc 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -90,8 +90,6 @@ namespace ts { return visitPropertyDeclaration(node as PropertyDeclaration); case SyntaxKind.VariableStatement: return visitVariableStatement(node as VariableStatement); - case SyntaxKind.ComputedPropertyName: - return visitComputedPropertyName(node as ComputedPropertyName); case SyntaxKind.PropertyAccessExpression: return visitPropertyAccessExpression(node as PropertyAccessExpression); case SyntaxKind.PrefixUnaryExpression: @@ -184,7 +182,7 @@ namespace ts { let node = visitEachChild(name, visitor, context); if (some(pendingExpressions)) { const expressions = pendingExpressions; - expressions.push(name.expression); + expressions.push(node.expression); pendingExpressions = []; node = factory.updateComputedPropertyName( node, diff --git a/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js b/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js new file mode 100644 index 0000000000000..966a81e23a1b0 --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).js @@ -0,0 +1,78 @@ +//// [privateNameComputedPropertyName1.ts] +class A { + #a = 'a'; + #b: string; + + readonly #c = 'c'; + readonly #d: string; + + #e = ''; + + constructor() { + this.#b = 'b'; + this.#d = 'd'; + } + + test() { + const data: Record = { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }; + const { + [this.#a]: a, + [this.#b]: b, + [this.#c]: c, + [this.#d]: d, + [this.#e = 'e']: e, + } = data; + console.log(a, b, c, d, e); + + const a1 = data[this.#a]; + const b1 = data[this.#b]; + const c1 = data[this.#c]; + const d1 = data[this.#d]; + const e1 = data[this.#e]; + console.log(a1, b1, c1, d1); + } +} + +new A().test(); + + + +//// [privateNameComputedPropertyName1.js] +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _a, _b, _c, _d, _e; +class A { + constructor() { + _a.set(this, 'a'); + _b.set(this, void 0); + _c.set(this, 'c'); + _d.set(this, void 0); + _e.set(this, ''); + __classPrivateFieldSet(this, _b, 'b'); + __classPrivateFieldSet(this, _d, 'd'); + } + test() { + const data = { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }; + const { [__classPrivateFieldGet(this, _a)]: a, [__classPrivateFieldGet(this, _b)]: b, [__classPrivateFieldGet(this, _c)]: c, [__classPrivateFieldGet(this, _d)]: d, [__classPrivateFieldSet(this, _e, 'e')]: e, } = data; + console.log(a, b, c, d, e); + const a1 = data[__classPrivateFieldGet(this, _a)]; + const b1 = data[__classPrivateFieldGet(this, _b)]; + const c1 = data[__classPrivateFieldGet(this, _c)]; + const d1 = data[__classPrivateFieldGet(this, _d)]; + const e1 = data[__classPrivateFieldGet(this, _e)]; + console.log(a1, b1, c1, d1); + } +} +_a = new WeakMap(), _b = new WeakMap(), _c = new WeakMap(), _d = new WeakMap(), _e = new WeakMap(); +new A().test(); diff --git a/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).symbols b/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).symbols new file mode 100644 index 0000000000000..b7aa24012d799 --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).symbols @@ -0,0 +1,127 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName1.ts === +class A { +>A : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + #a = 'a'; +>#a : Symbol(A.#a, Decl(privateNameComputedPropertyName1.ts, 0, 9)) + + #b: string; +>#b : Symbol(A.#b, Decl(privateNameComputedPropertyName1.ts, 1, 13)) + + readonly #c = 'c'; +>#c : Symbol(A.#c, Decl(privateNameComputedPropertyName1.ts, 2, 15)) + + readonly #d: string; +>#d : Symbol(A.#d, Decl(privateNameComputedPropertyName1.ts, 4, 22)) + + #e = ''; +>#e : Symbol(A.#e, Decl(privateNameComputedPropertyName1.ts, 5, 24)) + + constructor() { + this.#b = 'b'; +>this.#b : Symbol(A.#b, Decl(privateNameComputedPropertyName1.ts, 1, 13)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + this.#d = 'd'; +>this.#d : Symbol(A.#d, Decl(privateNameComputedPropertyName1.ts, 4, 22)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + } + + test() { +>test : Symbol(A.test, Decl(privateNameComputedPropertyName1.ts, 12, 5)) + + const data: Record = { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }; +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>a : Symbol(a, Decl(privateNameComputedPropertyName1.ts, 15, 46)) +>b : Symbol(b, Decl(privateNameComputedPropertyName1.ts, 15, 54)) +>c : Symbol(c, Decl(privateNameComputedPropertyName1.ts, 15, 62)) +>d : Symbol(d, Decl(privateNameComputedPropertyName1.ts, 15, 70)) +>e : Symbol(e, Decl(privateNameComputedPropertyName1.ts, 15, 78)) + + const { + [this.#a]: a, +>this.#a : Symbol(A.#a, Decl(privateNameComputedPropertyName1.ts, 0, 9)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) +>a : Symbol(a, Decl(privateNameComputedPropertyName1.ts, 16, 15)) + + [this.#b]: b, +>this.#b : Symbol(A.#b, Decl(privateNameComputedPropertyName1.ts, 1, 13)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) +>b : Symbol(b, Decl(privateNameComputedPropertyName1.ts, 17, 25)) + + [this.#c]: c, +>this.#c : Symbol(A.#c, Decl(privateNameComputedPropertyName1.ts, 2, 15)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) +>c : Symbol(c, Decl(privateNameComputedPropertyName1.ts, 18, 25)) + + [this.#d]: d, +>this.#d : Symbol(A.#d, Decl(privateNameComputedPropertyName1.ts, 4, 22)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) +>d : Symbol(d, Decl(privateNameComputedPropertyName1.ts, 19, 25)) + + [this.#e = 'e']: e, +>this.#e : Symbol(A.#e, Decl(privateNameComputedPropertyName1.ts, 5, 24)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) +>e : Symbol(e, Decl(privateNameComputedPropertyName1.ts, 20, 25)) + + } = data; +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) + + console.log(a, b, c, d, e); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>a : Symbol(a, Decl(privateNameComputedPropertyName1.ts, 16, 15)) +>b : Symbol(b, Decl(privateNameComputedPropertyName1.ts, 17, 25)) +>c : Symbol(c, Decl(privateNameComputedPropertyName1.ts, 18, 25)) +>d : Symbol(d, Decl(privateNameComputedPropertyName1.ts, 19, 25)) +>e : Symbol(e, Decl(privateNameComputedPropertyName1.ts, 20, 25)) + + const a1 = data[this.#a]; +>a1 : Symbol(a1, Decl(privateNameComputedPropertyName1.ts, 25, 13)) +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) +>this.#a : Symbol(A.#a, Decl(privateNameComputedPropertyName1.ts, 0, 9)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + const b1 = data[this.#b]; +>b1 : Symbol(b1, Decl(privateNameComputedPropertyName1.ts, 26, 13)) +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) +>this.#b : Symbol(A.#b, Decl(privateNameComputedPropertyName1.ts, 1, 13)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + const c1 = data[this.#c]; +>c1 : Symbol(c1, Decl(privateNameComputedPropertyName1.ts, 27, 13)) +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) +>this.#c : Symbol(A.#c, Decl(privateNameComputedPropertyName1.ts, 2, 15)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + const d1 = data[this.#d]; +>d1 : Symbol(d1, Decl(privateNameComputedPropertyName1.ts, 28, 13)) +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) +>this.#d : Symbol(A.#d, Decl(privateNameComputedPropertyName1.ts, 4, 22)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + const e1 = data[this.#e]; +>e1 : Symbol(e1, Decl(privateNameComputedPropertyName1.ts, 29, 13)) +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) +>this.#e : Symbol(A.#e, Decl(privateNameComputedPropertyName1.ts, 5, 24)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + console.log(a1, b1, c1, d1); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>a1 : Symbol(a1, Decl(privateNameComputedPropertyName1.ts, 25, 13)) +>b1 : Symbol(b1, Decl(privateNameComputedPropertyName1.ts, 26, 13)) +>c1 : Symbol(c1, Decl(privateNameComputedPropertyName1.ts, 27, 13)) +>d1 : Symbol(d1, Decl(privateNameComputedPropertyName1.ts, 28, 13)) + } +} + +new A().test(); +>new A().test : Symbol(A.test, Decl(privateNameComputedPropertyName1.ts, 12, 5)) +>A : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) +>test : Symbol(A.test, Decl(privateNameComputedPropertyName1.ts, 12, 5)) + + diff --git a/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).types b/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).types new file mode 100644 index 0000000000000..f8b24c7ecd898 --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName1(target=es2015).types @@ -0,0 +1,150 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName1.ts === +class A { +>A : A + + #a = 'a'; +>#a : string +>'a' : "a" + + #b: string; +>#b : string + + readonly #c = 'c'; +>#c : "c" +>'c' : "c" + + readonly #d: string; +>#d : string + + #e = ''; +>#e : string +>'' : "" + + constructor() { + this.#b = 'b'; +>this.#b = 'b' : "b" +>this.#b : string +>this : this +>'b' : "b" + + this.#d = 'd'; +>this.#d = 'd' : "d" +>this.#d : string +>this : this +>'d' : "d" + } + + test() { +>test : () => void + + const data: Record = { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }; +>data : Record +>{ a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' } : { a: string; b: string; c: string; d: string; e: string; } +>a : string +>'a' : "a" +>b : string +>'b' : "b" +>c : string +>'c' : "c" +>d : string +>'d' : "d" +>e : string +>'e' : "e" + + const { + [this.#a]: a, +>this.#a : string +>this : this +>a : string + + [this.#b]: b, +>this.#b : string +>this : this +>b : string + + [this.#c]: c, +>this.#c : "c" +>this : this +>c : string + + [this.#d]: d, +>this.#d : string +>this : this +>d : string + + [this.#e = 'e']: e, +>this.#e = 'e' : "e" +>this.#e : string +>this : this +>'e' : "e" +>e : string + + } = data; +>data : Record + + console.log(a, b, c, d, e); +>console.log(a, b, c, d, e) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>a : string +>b : string +>c : string +>d : string +>e : string + + const a1 = data[this.#a]; +>a1 : string +>data[this.#a] : string +>data : Record +>this.#a : string +>this : this + + const b1 = data[this.#b]; +>b1 : string +>data[this.#b] : string +>data : Record +>this.#b : string +>this : this + + const c1 = data[this.#c]; +>c1 : string +>data[this.#c] : string +>data : Record +>this.#c : "c" +>this : this + + const d1 = data[this.#d]; +>d1 : string +>data[this.#d] : string +>data : Record +>this.#d : string +>this : this + + const e1 = data[this.#e]; +>e1 : string +>data[this.#e] : string +>data : Record +>this.#e : string +>this : this + + console.log(a1, b1, c1, d1); +>console.log(a1, b1, c1, d1) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>a1 : string +>b1 : string +>c1 : string +>d1 : string + } +} + +new A().test(); +>new A().test() : void +>new A().test : () => void +>new A() : A +>A : typeof A +>test : () => void + + diff --git a/tests/baselines/reference/privateNameComputedPropertyName1(target=esnext).js b/tests/baselines/reference/privateNameComputedPropertyName1(target=esnext).js new file mode 100644 index 0000000000000..3ad77a36e51c9 --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName1(target=esnext).js @@ -0,0 +1,66 @@ +//// [privateNameComputedPropertyName1.ts] +class A { + #a = 'a'; + #b: string; + + readonly #c = 'c'; + readonly #d: string; + + #e = ''; + + constructor() { + this.#b = 'b'; + this.#d = 'd'; + } + + test() { + const data: Record = { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }; + const { + [this.#a]: a, + [this.#b]: b, + [this.#c]: c, + [this.#d]: d, + [this.#e = 'e']: e, + } = data; + console.log(a, b, c, d, e); + + const a1 = data[this.#a]; + const b1 = data[this.#b]; + const c1 = data[this.#c]; + const d1 = data[this.#d]; + const e1 = data[this.#e]; + console.log(a1, b1, c1, d1); + } +} + +new A().test(); + + + +//// [privateNameComputedPropertyName1.js] +class A { + constructor() { + this.#a = 'a'; + this.#c = 'c'; + this.#e = ''; + this.#b = 'b'; + this.#d = 'd'; + } + #a; + #b; + #c; + #d; + #e; + test() { + const data = { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }; + const { [this.#a]: a, [this.#b]: b, [this.#c]: c, [this.#d]: d, [this.#e = 'e']: e, } = data; + console.log(a, b, c, d, e); + const a1 = data[this.#a]; + const b1 = data[this.#b]; + const c1 = data[this.#c]; + const d1 = data[this.#d]; + const e1 = data[this.#e]; + console.log(a1, b1, c1, d1); + } +} +new A().test(); diff --git a/tests/baselines/reference/privateNameComputedPropertyName1(target=esnext).symbols b/tests/baselines/reference/privateNameComputedPropertyName1(target=esnext).symbols new file mode 100644 index 0000000000000..b7aa24012d799 --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName1(target=esnext).symbols @@ -0,0 +1,127 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName1.ts === +class A { +>A : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + #a = 'a'; +>#a : Symbol(A.#a, Decl(privateNameComputedPropertyName1.ts, 0, 9)) + + #b: string; +>#b : Symbol(A.#b, Decl(privateNameComputedPropertyName1.ts, 1, 13)) + + readonly #c = 'c'; +>#c : Symbol(A.#c, Decl(privateNameComputedPropertyName1.ts, 2, 15)) + + readonly #d: string; +>#d : Symbol(A.#d, Decl(privateNameComputedPropertyName1.ts, 4, 22)) + + #e = ''; +>#e : Symbol(A.#e, Decl(privateNameComputedPropertyName1.ts, 5, 24)) + + constructor() { + this.#b = 'b'; +>this.#b : Symbol(A.#b, Decl(privateNameComputedPropertyName1.ts, 1, 13)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + this.#d = 'd'; +>this.#d : Symbol(A.#d, Decl(privateNameComputedPropertyName1.ts, 4, 22)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + } + + test() { +>test : Symbol(A.test, Decl(privateNameComputedPropertyName1.ts, 12, 5)) + + const data: Record = { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }; +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>a : Symbol(a, Decl(privateNameComputedPropertyName1.ts, 15, 46)) +>b : Symbol(b, Decl(privateNameComputedPropertyName1.ts, 15, 54)) +>c : Symbol(c, Decl(privateNameComputedPropertyName1.ts, 15, 62)) +>d : Symbol(d, Decl(privateNameComputedPropertyName1.ts, 15, 70)) +>e : Symbol(e, Decl(privateNameComputedPropertyName1.ts, 15, 78)) + + const { + [this.#a]: a, +>this.#a : Symbol(A.#a, Decl(privateNameComputedPropertyName1.ts, 0, 9)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) +>a : Symbol(a, Decl(privateNameComputedPropertyName1.ts, 16, 15)) + + [this.#b]: b, +>this.#b : Symbol(A.#b, Decl(privateNameComputedPropertyName1.ts, 1, 13)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) +>b : Symbol(b, Decl(privateNameComputedPropertyName1.ts, 17, 25)) + + [this.#c]: c, +>this.#c : Symbol(A.#c, Decl(privateNameComputedPropertyName1.ts, 2, 15)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) +>c : Symbol(c, Decl(privateNameComputedPropertyName1.ts, 18, 25)) + + [this.#d]: d, +>this.#d : Symbol(A.#d, Decl(privateNameComputedPropertyName1.ts, 4, 22)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) +>d : Symbol(d, Decl(privateNameComputedPropertyName1.ts, 19, 25)) + + [this.#e = 'e']: e, +>this.#e : Symbol(A.#e, Decl(privateNameComputedPropertyName1.ts, 5, 24)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) +>e : Symbol(e, Decl(privateNameComputedPropertyName1.ts, 20, 25)) + + } = data; +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) + + console.log(a, b, c, d, e); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>a : Symbol(a, Decl(privateNameComputedPropertyName1.ts, 16, 15)) +>b : Symbol(b, Decl(privateNameComputedPropertyName1.ts, 17, 25)) +>c : Symbol(c, Decl(privateNameComputedPropertyName1.ts, 18, 25)) +>d : Symbol(d, Decl(privateNameComputedPropertyName1.ts, 19, 25)) +>e : Symbol(e, Decl(privateNameComputedPropertyName1.ts, 20, 25)) + + const a1 = data[this.#a]; +>a1 : Symbol(a1, Decl(privateNameComputedPropertyName1.ts, 25, 13)) +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) +>this.#a : Symbol(A.#a, Decl(privateNameComputedPropertyName1.ts, 0, 9)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + const b1 = data[this.#b]; +>b1 : Symbol(b1, Decl(privateNameComputedPropertyName1.ts, 26, 13)) +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) +>this.#b : Symbol(A.#b, Decl(privateNameComputedPropertyName1.ts, 1, 13)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + const c1 = data[this.#c]; +>c1 : Symbol(c1, Decl(privateNameComputedPropertyName1.ts, 27, 13)) +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) +>this.#c : Symbol(A.#c, Decl(privateNameComputedPropertyName1.ts, 2, 15)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + const d1 = data[this.#d]; +>d1 : Symbol(d1, Decl(privateNameComputedPropertyName1.ts, 28, 13)) +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) +>this.#d : Symbol(A.#d, Decl(privateNameComputedPropertyName1.ts, 4, 22)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + const e1 = data[this.#e]; +>e1 : Symbol(e1, Decl(privateNameComputedPropertyName1.ts, 29, 13)) +>data : Symbol(data, Decl(privateNameComputedPropertyName1.ts, 15, 13)) +>this.#e : Symbol(A.#e, Decl(privateNameComputedPropertyName1.ts, 5, 24)) +>this : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) + + console.log(a1, b1, c1, d1); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>a1 : Symbol(a1, Decl(privateNameComputedPropertyName1.ts, 25, 13)) +>b1 : Symbol(b1, Decl(privateNameComputedPropertyName1.ts, 26, 13)) +>c1 : Symbol(c1, Decl(privateNameComputedPropertyName1.ts, 27, 13)) +>d1 : Symbol(d1, Decl(privateNameComputedPropertyName1.ts, 28, 13)) + } +} + +new A().test(); +>new A().test : Symbol(A.test, Decl(privateNameComputedPropertyName1.ts, 12, 5)) +>A : Symbol(A, Decl(privateNameComputedPropertyName1.ts, 0, 0)) +>test : Symbol(A.test, Decl(privateNameComputedPropertyName1.ts, 12, 5)) + + diff --git a/tests/baselines/reference/privateNameComputedPropertyName1(target=esnext).types b/tests/baselines/reference/privateNameComputedPropertyName1(target=esnext).types new file mode 100644 index 0000000000000..f8b24c7ecd898 --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName1(target=esnext).types @@ -0,0 +1,150 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName1.ts === +class A { +>A : A + + #a = 'a'; +>#a : string +>'a' : "a" + + #b: string; +>#b : string + + readonly #c = 'c'; +>#c : "c" +>'c' : "c" + + readonly #d: string; +>#d : string + + #e = ''; +>#e : string +>'' : "" + + constructor() { + this.#b = 'b'; +>this.#b = 'b' : "b" +>this.#b : string +>this : this +>'b' : "b" + + this.#d = 'd'; +>this.#d = 'd' : "d" +>this.#d : string +>this : this +>'d' : "d" + } + + test() { +>test : () => void + + const data: Record = { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }; +>data : Record +>{ a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' } : { a: string; b: string; c: string; d: string; e: string; } +>a : string +>'a' : "a" +>b : string +>'b' : "b" +>c : string +>'c' : "c" +>d : string +>'d' : "d" +>e : string +>'e' : "e" + + const { + [this.#a]: a, +>this.#a : string +>this : this +>a : string + + [this.#b]: b, +>this.#b : string +>this : this +>b : string + + [this.#c]: c, +>this.#c : "c" +>this : this +>c : string + + [this.#d]: d, +>this.#d : string +>this : this +>d : string + + [this.#e = 'e']: e, +>this.#e = 'e' : "e" +>this.#e : string +>this : this +>'e' : "e" +>e : string + + } = data; +>data : Record + + console.log(a, b, c, d, e); +>console.log(a, b, c, d, e) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>a : string +>b : string +>c : string +>d : string +>e : string + + const a1 = data[this.#a]; +>a1 : string +>data[this.#a] : string +>data : Record +>this.#a : string +>this : this + + const b1 = data[this.#b]; +>b1 : string +>data[this.#b] : string +>data : Record +>this.#b : string +>this : this + + const c1 = data[this.#c]; +>c1 : string +>data[this.#c] : string +>data : Record +>this.#c : "c" +>this : this + + const d1 = data[this.#d]; +>d1 : string +>data[this.#d] : string +>data : Record +>this.#d : string +>this : this + + const e1 = data[this.#e]; +>e1 : string +>data[this.#e] : string +>data : Record +>this.#e : string +>this : this + + console.log(a1, b1, c1, d1); +>console.log(a1, b1, c1, d1) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>a1 : string +>b1 : string +>c1 : string +>d1 : string + } +} + +new A().test(); +>new A().test() : void +>new A().test : () => void +>new A() : A +>A : typeof A +>test : () => void + + diff --git a/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js b/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js new file mode 100644 index 0000000000000..fcb4dc6d17f3d --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).js @@ -0,0 +1,27 @@ +//// [privateNameComputedPropertyName2.ts] +let getX: (a: A) => number; + +class A { + #x = 100; + [(getX = (a: A) => a.#x, "_")]() {} +} + +console.log(getX(new A)); + + +//// [privateNameComputedPropertyName2.js] +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _x; +let getX; +class A { + constructor() { + _x.set(this, 100); + } + [(_x = new WeakMap(), (getX = (a) => __classPrivateFieldGet(a, _x), "_"))]() { } +} +console.log(getX(new A)); diff --git a/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).symbols b/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).symbols new file mode 100644 index 0000000000000..8c4bcf6d8916e --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).symbols @@ -0,0 +1,28 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName2.ts === +let getX: (a: A) => number; +>getX : Symbol(getX, Decl(privateNameComputedPropertyName2.ts, 0, 3)) +>a : Symbol(a, Decl(privateNameComputedPropertyName2.ts, 0, 11)) +>A : Symbol(A, Decl(privateNameComputedPropertyName2.ts, 0, 27)) + +class A { +>A : Symbol(A, Decl(privateNameComputedPropertyName2.ts, 0, 27)) + + #x = 100; +>#x : Symbol(A.#x, Decl(privateNameComputedPropertyName2.ts, 2, 9)) + + [(getX = (a: A) => a.#x, "_")]() {} +>[(getX = (a: A) => a.#x, "_")] : Symbol(A[(getX = (a: A) => a.#x, "_")], Decl(privateNameComputedPropertyName2.ts, 3, 13)) +>getX : Symbol(getX, Decl(privateNameComputedPropertyName2.ts, 0, 3)) +>a : Symbol(a, Decl(privateNameComputedPropertyName2.ts, 4, 14)) +>A : Symbol(A, Decl(privateNameComputedPropertyName2.ts, 0, 27)) +>a.#x : Symbol(A.#x, Decl(privateNameComputedPropertyName2.ts, 2, 9)) +>a : Symbol(a, Decl(privateNameComputedPropertyName2.ts, 4, 14)) +} + +console.log(getX(new A)); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>getX : Symbol(getX, Decl(privateNameComputedPropertyName2.ts, 0, 3)) +>A : Symbol(A, Decl(privateNameComputedPropertyName2.ts, 0, 27)) + diff --git a/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).types b/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).types new file mode 100644 index 0000000000000..8d9cd2378bb0f --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName2(target=es2015).types @@ -0,0 +1,35 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName2.ts === +let getX: (a: A) => number; +>getX : (a: A) => number +>a : A + +class A { +>A : A + + #x = 100; +>#x : number +>100 : 100 + + [(getX = (a: A) => a.#x, "_")]() {} +>[(getX = (a: A) => a.#x, "_")] : () => void +>(getX = (a: A) => a.#x, "_") : "_" +>getX = (a: A) => a.#x, "_" : "_" +>getX = (a: A) => a.#x : (a: A) => number +>getX : (a: A) => number +>(a: A) => a.#x : (a: A) => number +>a : A +>a.#x : number +>a : A +>"_" : "_" +} + +console.log(getX(new A)); +>console.log(getX(new A)) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>getX(new A) : number +>getX : (a: A) => number +>new A : A +>A : typeof A + diff --git a/tests/baselines/reference/privateNameComputedPropertyName2(target=esnext).js b/tests/baselines/reference/privateNameComputedPropertyName2(target=esnext).js new file mode 100644 index 0000000000000..0bcd7dac45e16 --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName2(target=esnext).js @@ -0,0 +1,21 @@ +//// [privateNameComputedPropertyName2.ts] +let getX: (a: A) => number; + +class A { + #x = 100; + [(getX = (a: A) => a.#x, "_")]() {} +} + +console.log(getX(new A)); + + +//// [privateNameComputedPropertyName2.js] +let getX; +class A { + constructor() { + this.#x = 100; + } + #x; + [(getX = (a) => a.#x, "_")]() { } +} +console.log(getX(new A)); diff --git a/tests/baselines/reference/privateNameComputedPropertyName2(target=esnext).symbols b/tests/baselines/reference/privateNameComputedPropertyName2(target=esnext).symbols new file mode 100644 index 0000000000000..8c4bcf6d8916e --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName2(target=esnext).symbols @@ -0,0 +1,28 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName2.ts === +let getX: (a: A) => number; +>getX : Symbol(getX, Decl(privateNameComputedPropertyName2.ts, 0, 3)) +>a : Symbol(a, Decl(privateNameComputedPropertyName2.ts, 0, 11)) +>A : Symbol(A, Decl(privateNameComputedPropertyName2.ts, 0, 27)) + +class A { +>A : Symbol(A, Decl(privateNameComputedPropertyName2.ts, 0, 27)) + + #x = 100; +>#x : Symbol(A.#x, Decl(privateNameComputedPropertyName2.ts, 2, 9)) + + [(getX = (a: A) => a.#x, "_")]() {} +>[(getX = (a: A) => a.#x, "_")] : Symbol(A[(getX = (a: A) => a.#x, "_")], Decl(privateNameComputedPropertyName2.ts, 3, 13)) +>getX : Symbol(getX, Decl(privateNameComputedPropertyName2.ts, 0, 3)) +>a : Symbol(a, Decl(privateNameComputedPropertyName2.ts, 4, 14)) +>A : Symbol(A, Decl(privateNameComputedPropertyName2.ts, 0, 27)) +>a.#x : Symbol(A.#x, Decl(privateNameComputedPropertyName2.ts, 2, 9)) +>a : Symbol(a, Decl(privateNameComputedPropertyName2.ts, 4, 14)) +} + +console.log(getX(new A)); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>getX : Symbol(getX, Decl(privateNameComputedPropertyName2.ts, 0, 3)) +>A : Symbol(A, Decl(privateNameComputedPropertyName2.ts, 0, 27)) + diff --git a/tests/baselines/reference/privateNameComputedPropertyName2(target=esnext).types b/tests/baselines/reference/privateNameComputedPropertyName2(target=esnext).types new file mode 100644 index 0000000000000..8d9cd2378bb0f --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName2(target=esnext).types @@ -0,0 +1,35 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName2.ts === +let getX: (a: A) => number; +>getX : (a: A) => number +>a : A + +class A { +>A : A + + #x = 100; +>#x : number +>100 : 100 + + [(getX = (a: A) => a.#x, "_")]() {} +>[(getX = (a: A) => a.#x, "_")] : () => void +>(getX = (a: A) => a.#x, "_") : "_" +>getX = (a: A) => a.#x, "_" : "_" +>getX = (a: A) => a.#x : (a: A) => number +>getX : (a: A) => number +>(a: A) => a.#x : (a: A) => number +>a : A +>a.#x : number +>a : A +>"_" : "_" +} + +console.log(getX(new A)); +>console.log(getX(new A)) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>getX(new A) : number +>getX : (a: A) => number +>new A : A +>A : typeof A + diff --git a/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js b/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js new file mode 100644 index 0000000000000..bb6bc692a330f --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).js @@ -0,0 +1,62 @@ +//// [privateNameComputedPropertyName3.ts] +class Foo { + #name; + + constructor(name) { + this.#name = name; + } + + getValue(x) { + const obj = this; + + class Bar { + #y = 100; + + [obj.#name]() { + return x + this.#y; + } + } + + return new Bar()[obj.#name](); + } +} + +console.log(new Foo("NAME").getValue(100)); + + +//// [privateNameComputedPropertyName3.js] +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _name; +class Foo { + constructor(name) { + _name.set(this, void 0); + __classPrivateFieldSet(this, _name, name); + } + getValue(x) { + var _y; + const obj = this; + class Bar { + constructor() { + _y.set(this, 100); + } + [(_y = new WeakMap(), __classPrivateFieldGet(obj, _name))]() { + return x + __classPrivateFieldGet(this, _y); + } + } + return new Bar()[__classPrivateFieldGet(obj, _name)](); + } +} +_name = new WeakMap(); +console.log(new Foo("NAME").getValue(100)); diff --git a/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).symbols b/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).symbols new file mode 100644 index 0000000000000..59403f53b88f2 --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).symbols @@ -0,0 +1,57 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName3.ts === +class Foo { +>Foo : Symbol(Foo, Decl(privateNameComputedPropertyName3.ts, 0, 0)) + + #name; +>#name : Symbol(Foo.#name, Decl(privateNameComputedPropertyName3.ts, 0, 11)) + + constructor(name) { +>name : Symbol(name, Decl(privateNameComputedPropertyName3.ts, 3, 16)) + + this.#name = name; +>this.#name : Symbol(Foo.#name, Decl(privateNameComputedPropertyName3.ts, 0, 11)) +>this : Symbol(Foo, Decl(privateNameComputedPropertyName3.ts, 0, 0)) +>name : Symbol(name, Decl(privateNameComputedPropertyName3.ts, 3, 16)) + } + + getValue(x) { +>getValue : Symbol(Foo.getValue, Decl(privateNameComputedPropertyName3.ts, 5, 5)) +>x : Symbol(x, Decl(privateNameComputedPropertyName3.ts, 7, 13)) + + const obj = this; +>obj : Symbol(obj, Decl(privateNameComputedPropertyName3.ts, 8, 13)) +>this : Symbol(Foo, Decl(privateNameComputedPropertyName3.ts, 0, 0)) + + class Bar { +>Bar : Symbol(Bar, Decl(privateNameComputedPropertyName3.ts, 8, 25)) + + #y = 100; +>#y : Symbol(Bar.#y, Decl(privateNameComputedPropertyName3.ts, 10, 19)) + + [obj.#name]() { +>[obj.#name] : Symbol(Bar[obj.#name], Decl(privateNameComputedPropertyName3.ts, 11, 21)) +>obj.#name : Symbol(Foo.#name, Decl(privateNameComputedPropertyName3.ts, 0, 11)) +>obj : Symbol(obj, Decl(privateNameComputedPropertyName3.ts, 8, 13)) + + return x + this.#y; +>x : Symbol(x, Decl(privateNameComputedPropertyName3.ts, 7, 13)) +>this.#y : Symbol(Bar.#y, Decl(privateNameComputedPropertyName3.ts, 10, 19)) +>this : Symbol(Bar, Decl(privateNameComputedPropertyName3.ts, 8, 25)) + } + } + + return new Bar()[obj.#name](); +>Bar : Symbol(Bar, Decl(privateNameComputedPropertyName3.ts, 8, 25)) +>obj.#name : Symbol(Foo.#name, Decl(privateNameComputedPropertyName3.ts, 0, 11)) +>obj : Symbol(obj, Decl(privateNameComputedPropertyName3.ts, 8, 13)) + } +} + +console.log(new Foo("NAME").getValue(100)); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>new Foo("NAME").getValue : Symbol(Foo.getValue, Decl(privateNameComputedPropertyName3.ts, 5, 5)) +>Foo : Symbol(Foo, Decl(privateNameComputedPropertyName3.ts, 0, 0)) +>getValue : Symbol(Foo.getValue, Decl(privateNameComputedPropertyName3.ts, 5, 5)) + diff --git a/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).types b/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).types new file mode 100644 index 0000000000000..6bffb1abbae5a --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName3(target=es2015).types @@ -0,0 +1,68 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName3.ts === +class Foo { +>Foo : Foo + + #name; +>#name : any + + constructor(name) { +>name : any + + this.#name = name; +>this.#name = name : any +>this.#name : any +>this : this +>name : any + } + + getValue(x) { +>getValue : (x: any) => any +>x : any + + const obj = this; +>obj : this +>this : this + + class Bar { +>Bar : Bar + + #y = 100; +>#y : number +>100 : 100 + + [obj.#name]() { +>[obj.#name] : () => any +>obj.#name : any +>obj : this + + return x + this.#y; +>x + this.#y : any +>x : any +>this.#y : number +>this : this + } + } + + return new Bar()[obj.#name](); +>new Bar()[obj.#name]() : error +>new Bar()[obj.#name] : error +>new Bar() : Bar +>Bar : typeof Bar +>obj.#name : any +>obj : this + } +} + +console.log(new Foo("NAME").getValue(100)); +>console.log(new Foo("NAME").getValue(100)) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>new Foo("NAME").getValue(100) : error +>new Foo("NAME").getValue : (x: any) => any +>new Foo("NAME") : Foo +>Foo : typeof Foo +>"NAME" : "NAME" +>getValue : (x: any) => any +>100 : 100 + diff --git a/tests/baselines/reference/privateNameComputedPropertyName3(target=esnext).js b/tests/baselines/reference/privateNameComputedPropertyName3(target=esnext).js new file mode 100644 index 0000000000000..32514bed845e3 --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName3(target=esnext).js @@ -0,0 +1,47 @@ +//// [privateNameComputedPropertyName3.ts] +class Foo { + #name; + + constructor(name) { + this.#name = name; + } + + getValue(x) { + const obj = this; + + class Bar { + #y = 100; + + [obj.#name]() { + return x + this.#y; + } + } + + return new Bar()[obj.#name](); + } +} + +console.log(new Foo("NAME").getValue(100)); + + +//// [privateNameComputedPropertyName3.js] +class Foo { + constructor(name) { + this.#name = name; + } + #name; + getValue(x) { + const obj = this; + class Bar { + constructor() { + this.#y = 100; + } + #y; + [obj.#name]() { + return x + this.#y; + } + } + return new Bar()[obj.#name](); + } +} +console.log(new Foo("NAME").getValue(100)); diff --git a/tests/baselines/reference/privateNameComputedPropertyName3(target=esnext).symbols b/tests/baselines/reference/privateNameComputedPropertyName3(target=esnext).symbols new file mode 100644 index 0000000000000..59403f53b88f2 --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName3(target=esnext).symbols @@ -0,0 +1,57 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName3.ts === +class Foo { +>Foo : Symbol(Foo, Decl(privateNameComputedPropertyName3.ts, 0, 0)) + + #name; +>#name : Symbol(Foo.#name, Decl(privateNameComputedPropertyName3.ts, 0, 11)) + + constructor(name) { +>name : Symbol(name, Decl(privateNameComputedPropertyName3.ts, 3, 16)) + + this.#name = name; +>this.#name : Symbol(Foo.#name, Decl(privateNameComputedPropertyName3.ts, 0, 11)) +>this : Symbol(Foo, Decl(privateNameComputedPropertyName3.ts, 0, 0)) +>name : Symbol(name, Decl(privateNameComputedPropertyName3.ts, 3, 16)) + } + + getValue(x) { +>getValue : Symbol(Foo.getValue, Decl(privateNameComputedPropertyName3.ts, 5, 5)) +>x : Symbol(x, Decl(privateNameComputedPropertyName3.ts, 7, 13)) + + const obj = this; +>obj : Symbol(obj, Decl(privateNameComputedPropertyName3.ts, 8, 13)) +>this : Symbol(Foo, Decl(privateNameComputedPropertyName3.ts, 0, 0)) + + class Bar { +>Bar : Symbol(Bar, Decl(privateNameComputedPropertyName3.ts, 8, 25)) + + #y = 100; +>#y : Symbol(Bar.#y, Decl(privateNameComputedPropertyName3.ts, 10, 19)) + + [obj.#name]() { +>[obj.#name] : Symbol(Bar[obj.#name], Decl(privateNameComputedPropertyName3.ts, 11, 21)) +>obj.#name : Symbol(Foo.#name, Decl(privateNameComputedPropertyName3.ts, 0, 11)) +>obj : Symbol(obj, Decl(privateNameComputedPropertyName3.ts, 8, 13)) + + return x + this.#y; +>x : Symbol(x, Decl(privateNameComputedPropertyName3.ts, 7, 13)) +>this.#y : Symbol(Bar.#y, Decl(privateNameComputedPropertyName3.ts, 10, 19)) +>this : Symbol(Bar, Decl(privateNameComputedPropertyName3.ts, 8, 25)) + } + } + + return new Bar()[obj.#name](); +>Bar : Symbol(Bar, Decl(privateNameComputedPropertyName3.ts, 8, 25)) +>obj.#name : Symbol(Foo.#name, Decl(privateNameComputedPropertyName3.ts, 0, 11)) +>obj : Symbol(obj, Decl(privateNameComputedPropertyName3.ts, 8, 13)) + } +} + +console.log(new Foo("NAME").getValue(100)); +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) +>new Foo("NAME").getValue : Symbol(Foo.getValue, Decl(privateNameComputedPropertyName3.ts, 5, 5)) +>Foo : Symbol(Foo, Decl(privateNameComputedPropertyName3.ts, 0, 0)) +>getValue : Symbol(Foo.getValue, Decl(privateNameComputedPropertyName3.ts, 5, 5)) + diff --git a/tests/baselines/reference/privateNameComputedPropertyName3(target=esnext).types b/tests/baselines/reference/privateNameComputedPropertyName3(target=esnext).types new file mode 100644 index 0000000000000..6bffb1abbae5a --- /dev/null +++ b/tests/baselines/reference/privateNameComputedPropertyName3(target=esnext).types @@ -0,0 +1,68 @@ +=== tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName3.ts === +class Foo { +>Foo : Foo + + #name; +>#name : any + + constructor(name) { +>name : any + + this.#name = name; +>this.#name = name : any +>this.#name : any +>this : this +>name : any + } + + getValue(x) { +>getValue : (x: any) => any +>x : any + + const obj = this; +>obj : this +>this : this + + class Bar { +>Bar : Bar + + #y = 100; +>#y : number +>100 : 100 + + [obj.#name]() { +>[obj.#name] : () => any +>obj.#name : any +>obj : this + + return x + this.#y; +>x + this.#y : any +>x : any +>this.#y : number +>this : this + } + } + + return new Bar()[obj.#name](); +>new Bar()[obj.#name]() : error +>new Bar()[obj.#name] : error +>new Bar() : Bar +>Bar : typeof Bar +>obj.#name : any +>obj : this + } +} + +console.log(new Foo("NAME").getValue(100)); +>console.log(new Foo("NAME").getValue(100)) : void +>console.log : (...data: any[]) => void +>console : Console +>log : (...data: any[]) => void +>new Foo("NAME").getValue(100) : error +>new Foo("NAME").getValue : (x: any) => any +>new Foo("NAME") : Foo +>Foo : typeof Foo +>"NAME" : "NAME" +>getValue : (x: any) => any +>100 : 100 + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName1.ts b/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName1.ts new file mode 100644 index 0000000000000..109985cb33c98 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName1.ts @@ -0,0 +1,38 @@ +// @target: esnext, es2015 + +class A { + #a = 'a'; + #b: string; + + readonly #c = 'c'; + readonly #d: string; + + #e = ''; + + constructor() { + this.#b = 'b'; + this.#d = 'd'; + } + + test() { + const data: Record = { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }; + const { + [this.#a]: a, + [this.#b]: b, + [this.#c]: c, + [this.#d]: d, + [this.#e = 'e']: e, + } = data; + console.log(a, b, c, d, e); + + const a1 = data[this.#a]; + const b1 = data[this.#b]; + const c1 = data[this.#c]; + const d1 = data[this.#d]; + const e1 = data[this.#e]; + console.log(a1, b1, c1, d1); + } +} + +new A().test(); + diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName2.ts b/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName2.ts new file mode 100644 index 0000000000000..a2e0a3e302541 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName2.ts @@ -0,0 +1,10 @@ +// @target: esnext, es2015 + +let getX: (a: A) => number; + +class A { + #x = 100; + [(getX = (a: A) => a.#x, "_")]() {} +} + +console.log(getX(new A)); diff --git a/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName3.ts b/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName3.ts new file mode 100644 index 0000000000000..09573f98c91b3 --- /dev/null +++ b/tests/cases/conformance/classes/members/privateNames/privateNameComputedPropertyName3.ts @@ -0,0 +1,25 @@ +// @target: esnext, es2015 + +class Foo { + #name; + + constructor(name) { + this.#name = name; + } + + getValue(x) { + const obj = this; + + class Bar { + #y = 100; + + [obj.#name]() { + return x + this.#y; + } + } + + return new Bar()[obj.#name](); + } +} + +console.log(new Foo("NAME").getValue(100));