Skip to content

Commit 54bbf74

Browse files
authored
Do not lookup name of default property symbols from the symbols value declaration (#28711)
1 parent 52a46c6 commit 54bbf74

File tree

5 files changed

+100
-2
lines changed

5 files changed

+100
-2
lines changed

src/compiler/checker.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9410,8 +9410,13 @@ namespace ts {
94109410
if (!(getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier)) {
94119411
let type = getLateBoundSymbol(prop).nameType;
94129412
if (!type && !isKnownSymbol(prop)) {
9413-
const name = prop.valueDeclaration && getNameOfDeclaration(prop.valueDeclaration) as PropertyName;
9414-
type = name && getLiteralTypeFromPropertyName(name) || getLiteralType(symbolName(prop));
9413+
if (prop.escapedName === InternalSymbolName.Default) {
9414+
type = getLiteralType("default");
9415+
}
9416+
else {
9417+
const name = prop.valueDeclaration && getNameOfDeclaration(prop.valueDeclaration) as PropertyName;
9418+
type = name && getLiteralTypeFromPropertyName(name) || getLiteralType(symbolName(prop));
9419+
}
94159420
}
94169421
if (type && type.flags & include) {
94179422
return type;
@@ -20873,6 +20878,7 @@ namespace ts {
2087320878
if (hasSyntheticDefault) {
2087420879
const memberTable = createSymbolTable();
2087520880
const newSymbol = createSymbol(SymbolFlags.Alias, InternalSymbolName.Default);
20881+
newSymbol.nameType = getLiteralType("default");
2087620882
newSymbol.target = resolveSymbol(symbol);
2087720883
memberTable.set(InternalSymbolName.Default, newSymbol);
2087820884
const anonymousSymbol = createSymbol(SymbolFlags.TypeLiteral, InternalSymbolName.Type);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//// [tests/cases/compiler/keyofModuleObjectHasCorrectKeys.ts] ////
2+
3+
//// [example.ts]
4+
export default function add(a: number, b: number) {
5+
return a + b;
6+
}
7+
8+
//// [test.ts]
9+
import * as example from './example';
10+
11+
declare function test<T>(object: T, method: keyof T): void;
12+
13+
test(example, "default");
14+
15+
16+
//// [example.js]
17+
"use strict";
18+
exports.__esModule = true;
19+
function add(a, b) {
20+
return a + b;
21+
}
22+
exports["default"] = add;
23+
//// [test.js]
24+
"use strict";
25+
exports.__esModule = true;
26+
var example = require("./example");
27+
test(example, "default");
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
=== tests/cases/compiler/example.ts ===
2+
export default function add(a: number, b: number) {
3+
>add : Symbol(add, Decl(example.ts, 0, 0))
4+
>a : Symbol(a, Decl(example.ts, 0, 28))
5+
>b : Symbol(b, Decl(example.ts, 0, 38))
6+
7+
return a + b;
8+
>a : Symbol(a, Decl(example.ts, 0, 28))
9+
>b : Symbol(b, Decl(example.ts, 0, 38))
10+
}
11+
12+
=== tests/cases/compiler/test.ts ===
13+
import * as example from './example';
14+
>example : Symbol(example, Decl(test.ts, 0, 6))
15+
16+
declare function test<T>(object: T, method: keyof T): void;
17+
>test : Symbol(test, Decl(test.ts, 0, 37))
18+
>T : Symbol(T, Decl(test.ts, 2, 22))
19+
>object : Symbol(object, Decl(test.ts, 2, 25))
20+
>T : Symbol(T, Decl(test.ts, 2, 22))
21+
>method : Symbol(method, Decl(test.ts, 2, 35))
22+
>T : Symbol(T, Decl(test.ts, 2, 22))
23+
24+
test(example, "default");
25+
>test : Symbol(test, Decl(test.ts, 0, 37))
26+
>example : Symbol(example, Decl(test.ts, 0, 6))
27+
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
=== tests/cases/compiler/example.ts ===
2+
export default function add(a: number, b: number) {
3+
>add : (a: number, b: number) => number
4+
>a : number
5+
>b : number
6+
7+
return a + b;
8+
>a + b : number
9+
>a : number
10+
>b : number
11+
}
12+
13+
=== tests/cases/compiler/test.ts ===
14+
import * as example from './example';
15+
>example : typeof example
16+
17+
declare function test<T>(object: T, method: keyof T): void;
18+
>test : <T>(object: T, method: keyof T) => void
19+
>object : T
20+
>method : keyof T
21+
22+
test(example, "default");
23+
>test(example, "default") : void
24+
>test : <T>(object: T, method: keyof T) => void
25+
>example : typeof example
26+
>"default" : "default"
27+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// @filename: example.ts
2+
export default function add(a: number, b: number) {
3+
return a + b;
4+
}
5+
6+
// @filename: test.ts
7+
import * as example from './example';
8+
9+
declare function test<T>(object: T, method: keyof T): void;
10+
11+
test(example, "default");

0 commit comments

Comments
 (0)