diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 26bf830516..422e08eccd 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5459,7 +5459,7 @@ namespace ts { const declaration = node; if (declaration.typeParameters) { for (const d of declaration.typeParameters) { - if (contains(mappedTypes, getDeclaredTypeOfTypeParameter(d.symbol))) { + if (contains(mappedTypes, getDeclaredTypeOfTypeParameter(getSymbolOfNode(d)))) { return true; } } diff --git a/tests/baselines/reference/instantiateCrossFileMerge.js b/tests/baselines/reference/instantiateCrossFileMerge.js new file mode 100644 index 0000000000..cf452b599b --- /dev/null +++ b/tests/baselines/reference/instantiateCrossFileMerge.js @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/instantiateCrossFileMerge.ts] //// + +//// [first.ts] +declare class P { + constructor(callback: (resolve: (value: R) => void) => void); +} + +//// [second.ts] +interface P { } +new P(r => { r('foo') }); + + +//// [first.js] +//// [second.js] +new P(function (r) { r('foo'); }); diff --git a/tests/baselines/reference/instantiateCrossFileMerge.symbols b/tests/baselines/reference/instantiateCrossFileMerge.symbols new file mode 100644 index 0000000000..64f9586f48 --- /dev/null +++ b/tests/baselines/reference/instantiateCrossFileMerge.symbols @@ -0,0 +1,22 @@ +=== tests/cases/compiler/first.ts === +declare class P { +>P : Symbol(P, Decl(first.ts, 0, 0), Decl(second.ts, 0, 0)) +>R : Symbol(R, Decl(first.ts, 0, 16), Decl(second.ts, 0, 12)) + + constructor(callback: (resolve: (value: R) => void) => void); +>callback : Symbol(callback, Decl(first.ts, 1, 16)) +>resolve : Symbol(resolve, Decl(first.ts, 1, 27)) +>value : Symbol(value, Decl(first.ts, 1, 37)) +>R : Symbol(R, Decl(first.ts, 0, 16), Decl(second.ts, 0, 12)) +} + +=== tests/cases/compiler/second.ts === +interface P { } +>P : Symbol(P, Decl(first.ts, 0, 0), Decl(second.ts, 0, 0)) +>R : Symbol(R, Decl(first.ts, 0, 16), Decl(second.ts, 0, 12)) + +new P(r => { r('foo') }); +>P : Symbol(P, Decl(first.ts, 0, 0), Decl(second.ts, 0, 0)) +>r : Symbol(r, Decl(second.ts, 1, 14)) +>r : Symbol(r, Decl(second.ts, 1, 14)) + diff --git a/tests/baselines/reference/instantiateCrossFileMerge.types b/tests/baselines/reference/instantiateCrossFileMerge.types new file mode 100644 index 0000000000..8fbeaab3d1 --- /dev/null +++ b/tests/baselines/reference/instantiateCrossFileMerge.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/first.ts === +declare class P { +>P : P +>R : R + + constructor(callback: (resolve: (value: R) => void) => void); +>callback : (resolve: (value: R) => void) => void +>resolve : (value: R) => void +>value : R +>R : R +} + +=== tests/cases/compiler/second.ts === +interface P { } +>P : P +>R : R + +new P(r => { r('foo') }); +>new P(r => { r('foo') }) : P +>P : typeof P +>r => { r('foo') } : (r: (value: string) => void) => void +>r : (value: string) => void +>r('foo') : void +>r : (value: string) => void +>'foo' : string + diff --git a/tests/cases/compiler/instantiateCrossFileMerge.ts b/tests/cases/compiler/instantiateCrossFileMerge.ts new file mode 100644 index 0000000000..00f5ce22fa --- /dev/null +++ b/tests/cases/compiler/instantiateCrossFileMerge.ts @@ -0,0 +1,8 @@ +// @filename: first.ts +declare class P { + constructor(callback: (resolve: (value: R) => void) => void); +} + +// @filename: second.ts +interface P { } +new P(r => { r('foo') });