1// @strict: true 2// @target: esnext 3// @useDefineForClassFields: false 4 5class A { private x: unknown; y?: string; } 6class B { private x: unknown; y?: string; } 7 8declare let ab: A & B; 9ab.y = 'hello'; 10ab = {}; 11 12function f1(node: A | B) { 13 if (node instanceof A || node instanceof A) { 14 node; // A 15 } 16 else { 17 node; // B 18 } 19 node; // A | B 20} 21 22// Repro from #37659 23 24abstract class ViewNode { } 25abstract class ViewRefNode extends ViewNode { } 26abstract class ViewRefFileNode extends ViewRefNode { } 27 28class CommitFileNode extends ViewRefFileNode { 29 private _id: any; 30} 31 32class ResultsFileNode extends ViewRefFileNode { 33 private _id: any; 34} 35 36class StashFileNode extends CommitFileNode { 37 private _id2: any; 38} 39 40class StatusFileNode extends ViewNode { 41 private _id: any; 42} 43 44class Foo { 45 private async foo(node: CommitFileNode | ResultsFileNode | StashFileNode) { 46 if ( 47 !(node instanceof CommitFileNode) && 48 !(node instanceof StashFileNode) && 49 !(node instanceof ResultsFileNode) 50 ) { 51 return; 52 } 53 54 await this.bar(node); 55 } 56 57 private async bar(node: CommitFileNode | ResultsFileNode | StashFileNode | StatusFileNode, options?: {}) { 58 return Promise.resolve(undefined); 59 } 60} 61