TypeScript/tests/cases/compiler/intersectionWithConflictingPrivates.ts
Anders Hejlsberg 349ae45a2c
Reduce intersections with conflicting privates, elaborate on reasons (#37762)
* Elaborate on reasons for 'never' intersections

* Accept new API baselines

* Accept new baselines

* Add tests

* Accept new baselines

* Address CR feedback
2020-04-02 18:00:59 -07:00

60 lines
1.2 KiB
TypeScript

// @strict: true
// @target: esnext
class A { private x: unknown; y?: string; }
class B { private x: unknown; y?: string; }
declare let ab: A & B;
ab.y = 'hello';
ab = {};
function f1(node: A | B) {
if (node instanceof A || node instanceof A) {
node; // A
}
else {
node; // B
}
node; // A | B
}
// Repro from #37659
abstract class ViewNode { }
abstract class ViewRefNode extends ViewNode { }
abstract class ViewRefFileNode extends ViewRefNode { }
class CommitFileNode extends ViewRefFileNode {
private _id: any;
}
class ResultsFileNode extends ViewRefFileNode {
private _id: any;
}
class StashFileNode extends CommitFileNode {
private _id2: any;
}
class StatusFileNode extends ViewNode {
private _id: any;
}
class Foo {
private async foo(node: CommitFileNode | ResultsFileNode | StashFileNode) {
if (
!(node instanceof CommitFileNode) &&
!(node instanceof StashFileNode) &&
!(node instanceof ResultsFileNode)
) {
return;
}
await this.bar(node);
}
private async bar(node: CommitFileNode | ResultsFileNode | StashFileNode | StatusFileNode, options?: {}) {
return Promise.resolve(undefined);
}
}