diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 76e81a959790b..1f917346cce01 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -15547,7 +15547,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { let firstValueDeclaration: Declaration | undefined; let hasNonUniformValueDeclaration = false; for (const prop of props) { - if (!firstValueDeclaration) { + if (!prop.valueDeclaration) { + hasNonUniformValueDeclaration = true; + } + else if (!firstValueDeclaration) { firstValueDeclaration = prop.valueDeclaration; } else if (prop.valueDeclaration && prop.valueDeclaration !== firstValueDeclaration) { diff --git a/tests/baselines/reference/intersectionWithConflictingPrivates2.js b/tests/baselines/reference/intersectionWithConflictingPrivates2.js new file mode 100644 index 0000000000000..1db6dada1f034 --- /dev/null +++ b/tests/baselines/reference/intersectionWithConflictingPrivates2.js @@ -0,0 +1,10 @@ +//// [tests/cases/compiler/intersectionWithConflictingPrivates2.ts] //// + +//// [intersectionWithConflictingPrivates2.ts] +declare class A { + private a: number; + +} +type B = Pick<{ a: number }, 'a'> & A; + +//// [intersectionWithConflictingPrivates2.js] diff --git a/tests/baselines/reference/intersectionWithConflictingPrivates2.symbols b/tests/baselines/reference/intersectionWithConflictingPrivates2.symbols new file mode 100644 index 0000000000000..fb2ef31d89a54 --- /dev/null +++ b/tests/baselines/reference/intersectionWithConflictingPrivates2.symbols @@ -0,0 +1,16 @@ +//// [tests/cases/compiler/intersectionWithConflictingPrivates2.ts] //// + +=== intersectionWithConflictingPrivates2.ts === +declare class A { +>A : Symbol(A, Decl(intersectionWithConflictingPrivates2.ts, 0, 0)) + + private a: number; +>a : Symbol(A.a, Decl(intersectionWithConflictingPrivates2.ts, 0, 17)) + +} +type B = Pick<{ a: number }, 'a'> & A; +>B : Symbol(B, Decl(intersectionWithConflictingPrivates2.ts, 3, 1)) +>Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --)) +>a : Symbol(a, Decl(intersectionWithConflictingPrivates2.ts, 4, 15)) +>A : Symbol(A, Decl(intersectionWithConflictingPrivates2.ts, 0, 0)) + diff --git a/tests/baselines/reference/intersectionWithConflictingPrivates2.types b/tests/baselines/reference/intersectionWithConflictingPrivates2.types new file mode 100644 index 0000000000000..e523c602b4142 --- /dev/null +++ b/tests/baselines/reference/intersectionWithConflictingPrivates2.types @@ -0,0 +1,18 @@ +//// [tests/cases/compiler/intersectionWithConflictingPrivates2.ts] //// + +=== intersectionWithConflictingPrivates2.ts === +declare class A { +>A : A +> : ^ + + private a: number; +>a : number +> : ^^^^^^ + +} +type B = Pick<{ a: number }, 'a'> & A; +>B : never +> : ^^^^^ +>a : number +> : ^^^^^^ + diff --git a/tests/cases/compiler/intersectionWithConflictingPrivates2.ts b/tests/cases/compiler/intersectionWithConflictingPrivates2.ts new file mode 100644 index 0000000000000..0289a0b7aee28 --- /dev/null +++ b/tests/cases/compiler/intersectionWithConflictingPrivates2.ts @@ -0,0 +1,5 @@ +declare class A { + private a: number; + +} +type B = Pick<{ a: number }, 'a'> & A; \ No newline at end of file