Do not lookup name of default property symbols from the symbols value declaration (#28711)

This commit is contained in:
Wesley Wigham 2018-11-28 13:58:43 -08:00 committed by GitHub
parent 52a46c6793
commit 54bbf74f62
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 100 additions and 2 deletions

View File

@ -9410,8 +9410,13 @@ namespace ts {
if (!(getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier)) {
let type = getLateBoundSymbol(prop).nameType;
if (!type && !isKnownSymbol(prop)) {
const name = prop.valueDeclaration && getNameOfDeclaration(prop.valueDeclaration) as PropertyName;
type = name && getLiteralTypeFromPropertyName(name) || getLiteralType(symbolName(prop));
if (prop.escapedName === InternalSymbolName.Default) {
type = getLiteralType("default");
}
else {
const name = prop.valueDeclaration && getNameOfDeclaration(prop.valueDeclaration) as PropertyName;
type = name && getLiteralTypeFromPropertyName(name) || getLiteralType(symbolName(prop));
}
}
if (type && type.flags & include) {
return type;
@ -20873,6 +20878,7 @@ namespace ts {
if (hasSyntheticDefault) {
const memberTable = createSymbolTable();
const newSymbol = createSymbol(SymbolFlags.Alias, InternalSymbolName.Default);
newSymbol.nameType = getLiteralType("default");
newSymbol.target = resolveSymbol(symbol);
memberTable.set(InternalSymbolName.Default, newSymbol);
const anonymousSymbol = createSymbol(SymbolFlags.TypeLiteral, InternalSymbolName.Type);

View File

@ -0,0 +1,27 @@
//// [tests/cases/compiler/keyofModuleObjectHasCorrectKeys.ts] ////
//// [example.ts]
export default function add(a: number, b: number) {
return a + b;
}
//// [test.ts]
import * as example from './example';
declare function test<T>(object: T, method: keyof T): void;
test(example, "default");
//// [example.js]
"use strict";
exports.__esModule = true;
function add(a, b) {
return a + b;
}
exports["default"] = add;
//// [test.js]
"use strict";
exports.__esModule = true;
var example = require("./example");
test(example, "default");

View File

@ -0,0 +1,27 @@
=== tests/cases/compiler/example.ts ===
export default function add(a: number, b: number) {
>add : Symbol(add, Decl(example.ts, 0, 0))
>a : Symbol(a, Decl(example.ts, 0, 28))
>b : Symbol(b, Decl(example.ts, 0, 38))
return a + b;
>a : Symbol(a, Decl(example.ts, 0, 28))
>b : Symbol(b, Decl(example.ts, 0, 38))
}
=== tests/cases/compiler/test.ts ===
import * as example from './example';
>example : Symbol(example, Decl(test.ts, 0, 6))
declare function test<T>(object: T, method: keyof T): void;
>test : Symbol(test, Decl(test.ts, 0, 37))
>T : Symbol(T, Decl(test.ts, 2, 22))
>object : Symbol(object, Decl(test.ts, 2, 25))
>T : Symbol(T, Decl(test.ts, 2, 22))
>method : Symbol(method, Decl(test.ts, 2, 35))
>T : Symbol(T, Decl(test.ts, 2, 22))
test(example, "default");
>test : Symbol(test, Decl(test.ts, 0, 37))
>example : Symbol(example, Decl(test.ts, 0, 6))

View File

@ -0,0 +1,27 @@
=== tests/cases/compiler/example.ts ===
export default function add(a: number, b: number) {
>add : (a: number, b: number) => number
>a : number
>b : number
return a + b;
>a + b : number
>a : number
>b : number
}
=== tests/cases/compiler/test.ts ===
import * as example from './example';
>example : typeof example
declare function test<T>(object: T, method: keyof T): void;
>test : <T>(object: T, method: keyof T) => void
>object : T
>method : keyof T
test(example, "default");
>test(example, "default") : void
>test : <T>(object: T, method: keyof T) => void
>example : typeof example
>"default" : "default"

View File

@ -0,0 +1,11 @@
// @filename: example.ts
export default function add(a: number, b: number) {
return a + b;
}
// @filename: test.ts
import * as example from './example';
declare function test<T>(object: T, method: keyof T): void;
test(example, "default");