• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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