Skip to content

Commit 8b6e853

Browse files
committed
Accept new baselines
1 parent 1c3dbd4 commit 8b6e853

4 files changed

+291
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
tests/cases/compiler/intersectionsOfLargeUnions.ts(21,15): error TS2536: Type 'T' cannot be used to index type 'HTMLElementTagNameMap'.
2+
tests/cases/compiler/intersectionsOfLargeUnions.ts(21,15): error TS2536: Type 'P' cannot be used to index type 'HTMLElementTagNameMap[T]'.
3+
4+
5+
==== tests/cases/compiler/intersectionsOfLargeUnions.ts (2 errors) ====
6+
// Repro from #23977
7+
8+
export function assertIsElement(node: Node | null): node is Element {
9+
let nodeType = node === null ? null : node.nodeType;
10+
return nodeType === 1;
11+
}
12+
13+
export function assertNodeTagName<
14+
T extends keyof ElementTagNameMap,
15+
U extends ElementTagNameMap[T]>(node: Node | null, tagName: T): node is U {
16+
if (assertIsElement(node)) {
17+
const nodeTagName = node.tagName.toLowerCase();
18+
return nodeTagName === tagName;
19+
}
20+
return false;
21+
}
22+
23+
export function assertNodeProperty<
24+
T extends keyof ElementTagNameMap,
25+
P extends keyof ElementTagNameMap[T],
26+
V extends HTMLElementTagNameMap[T][P]>(node: Node | null, tagName: T, prop: P, value: V) {
27+
~~~~~~~~~~~~~~~~~~~~~~~~
28+
!!! error TS2536: Type 'T' cannot be used to index type 'HTMLElementTagNameMap'.
29+
~~~~~~~~~~~~~~~~~~~~~~~~~~~
30+
!!! error TS2536: Type 'P' cannot be used to index type 'HTMLElementTagNameMap[T]'.
31+
if (assertNodeTagName(node, tagName)) {
32+
node[prop];
33+
}
34+
}
35+
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
//// [intersectionsOfLargeUnions.ts]
2+
// Repro from #23977
3+
4+
export function assertIsElement(node: Node | null): node is Element {
5+
let nodeType = node === null ? null : node.nodeType;
6+
return nodeType === 1;
7+
}
8+
9+
export function assertNodeTagName<
10+
T extends keyof ElementTagNameMap,
11+
U extends ElementTagNameMap[T]>(node: Node | null, tagName: T): node is U {
12+
if (assertIsElement(node)) {
13+
const nodeTagName = node.tagName.toLowerCase();
14+
return nodeTagName === tagName;
15+
}
16+
return false;
17+
}
18+
19+
export function assertNodeProperty<
20+
T extends keyof ElementTagNameMap,
21+
P extends keyof ElementTagNameMap[T],
22+
V extends HTMLElementTagNameMap[T][P]>(node: Node | null, tagName: T, prop: P, value: V) {
23+
if (assertNodeTagName(node, tagName)) {
24+
node[prop];
25+
}
26+
}
27+
28+
29+
//// [intersectionsOfLargeUnions.js]
30+
"use strict";
31+
// Repro from #23977
32+
exports.__esModule = true;
33+
function assertIsElement(node) {
34+
var nodeType = node === null ? null : node.nodeType;
35+
return nodeType === 1;
36+
}
37+
exports.assertIsElement = assertIsElement;
38+
function assertNodeTagName(node, tagName) {
39+
if (assertIsElement(node)) {
40+
var nodeTagName = node.tagName.toLowerCase();
41+
return nodeTagName === tagName;
42+
}
43+
return false;
44+
}
45+
exports.assertNodeTagName = assertNodeTagName;
46+
function assertNodeProperty(node, tagName, prop, value) {
47+
if (assertNodeTagName(node, tagName)) {
48+
node[prop];
49+
}
50+
}
51+
exports.assertNodeProperty = assertNodeProperty;
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
=== tests/cases/compiler/intersectionsOfLargeUnions.ts ===
2+
// Repro from #23977
3+
4+
export function assertIsElement(node: Node | null): node is Element {
5+
>assertIsElement : Symbol(assertIsElement, Decl(intersectionsOfLargeUnions.ts, 0, 0))
6+
>node : Symbol(node, Decl(intersectionsOfLargeUnions.ts, 2, 32))
7+
>Node : Symbol(Node, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
8+
>node : Symbol(node, Decl(intersectionsOfLargeUnions.ts, 2, 32))
9+
>Element : Symbol(Element, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
10+
11+
let nodeType = node === null ? null : node.nodeType;
12+
>nodeType : Symbol(nodeType, Decl(intersectionsOfLargeUnions.ts, 3, 7))
13+
>node : Symbol(node, Decl(intersectionsOfLargeUnions.ts, 2, 32))
14+
>node.nodeType : Symbol(Node.nodeType, Decl(lib.d.ts, --, --))
15+
>node : Symbol(node, Decl(intersectionsOfLargeUnions.ts, 2, 32))
16+
>nodeType : Symbol(Node.nodeType, Decl(lib.d.ts, --, --))
17+
18+
return nodeType === 1;
19+
>nodeType : Symbol(nodeType, Decl(intersectionsOfLargeUnions.ts, 3, 7))
20+
}
21+
22+
export function assertNodeTagName<
23+
>assertNodeTagName : Symbol(assertNodeTagName, Decl(intersectionsOfLargeUnions.ts, 5, 1))
24+
25+
T extends keyof ElementTagNameMap,
26+
>T : Symbol(T, Decl(intersectionsOfLargeUnions.ts, 7, 34))
27+
>ElementTagNameMap : Symbol(ElementTagNameMap, Decl(lib.d.ts, --, --))
28+
29+
U extends ElementTagNameMap[T]>(node: Node | null, tagName: T): node is U {
30+
>U : Symbol(U, Decl(intersectionsOfLargeUnions.ts, 8, 38))
31+
>ElementTagNameMap : Symbol(ElementTagNameMap, Decl(lib.d.ts, --, --))
32+
>T : Symbol(T, Decl(intersectionsOfLargeUnions.ts, 7, 34))
33+
>node : Symbol(node, Decl(intersectionsOfLargeUnions.ts, 9, 36))
34+
>Node : Symbol(Node, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
35+
>tagName : Symbol(tagName, Decl(intersectionsOfLargeUnions.ts, 9, 54))
36+
>T : Symbol(T, Decl(intersectionsOfLargeUnions.ts, 7, 34))
37+
>node : Symbol(node, Decl(intersectionsOfLargeUnions.ts, 9, 36))
38+
>U : Symbol(U, Decl(intersectionsOfLargeUnions.ts, 8, 38))
39+
40+
if (assertIsElement(node)) {
41+
>assertIsElement : Symbol(assertIsElement, Decl(intersectionsOfLargeUnions.ts, 0, 0))
42+
>node : Symbol(node, Decl(intersectionsOfLargeUnions.ts, 9, 36))
43+
44+
const nodeTagName = node.tagName.toLowerCase();
45+
>nodeTagName : Symbol(nodeTagName, Decl(intersectionsOfLargeUnions.ts, 11, 13))
46+
>node.tagName.toLowerCase : Symbol(String.toLowerCase, Decl(lib.d.ts, --, --))
47+
>node.tagName : Symbol(Element.tagName, Decl(lib.d.ts, --, --))
48+
>node : Symbol(node, Decl(intersectionsOfLargeUnions.ts, 9, 36))
49+
>tagName : Symbol(Element.tagName, Decl(lib.d.ts, --, --))
50+
>toLowerCase : Symbol(String.toLowerCase, Decl(lib.d.ts, --, --))
51+
52+
return nodeTagName === tagName;
53+
>nodeTagName : Symbol(nodeTagName, Decl(intersectionsOfLargeUnions.ts, 11, 13))
54+
>tagName : Symbol(tagName, Decl(intersectionsOfLargeUnions.ts, 9, 54))
55+
}
56+
return false;
57+
}
58+
59+
export function assertNodeProperty<
60+
>assertNodeProperty : Symbol(assertNodeProperty, Decl(intersectionsOfLargeUnions.ts, 15, 1))
61+
62+
T extends keyof ElementTagNameMap,
63+
>T : Symbol(T, Decl(intersectionsOfLargeUnions.ts, 17, 35))
64+
>ElementTagNameMap : Symbol(ElementTagNameMap, Decl(lib.d.ts, --, --))
65+
66+
P extends keyof ElementTagNameMap[T],
67+
>P : Symbol(P, Decl(intersectionsOfLargeUnions.ts, 18, 38))
68+
>ElementTagNameMap : Symbol(ElementTagNameMap, Decl(lib.d.ts, --, --))
69+
>T : Symbol(T, Decl(intersectionsOfLargeUnions.ts, 17, 35))
70+
71+
V extends HTMLElementTagNameMap[T][P]>(node: Node | null, tagName: T, prop: P, value: V) {
72+
>V : Symbol(V, Decl(intersectionsOfLargeUnions.ts, 19, 41))
73+
>HTMLElementTagNameMap : Symbol(HTMLElementTagNameMap, Decl(lib.d.ts, --, --))
74+
>T : Symbol(T, Decl(intersectionsOfLargeUnions.ts, 17, 35))
75+
>P : Symbol(P, Decl(intersectionsOfLargeUnions.ts, 18, 38))
76+
>node : Symbol(node, Decl(intersectionsOfLargeUnions.ts, 20, 43))
77+
>Node : Symbol(Node, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
78+
>tagName : Symbol(tagName, Decl(intersectionsOfLargeUnions.ts, 20, 61))
79+
>T : Symbol(T, Decl(intersectionsOfLargeUnions.ts, 17, 35))
80+
>prop : Symbol(prop, Decl(intersectionsOfLargeUnions.ts, 20, 73))
81+
>P : Symbol(P, Decl(intersectionsOfLargeUnions.ts, 18, 38))
82+
>value : Symbol(value, Decl(intersectionsOfLargeUnions.ts, 20, 82))
83+
>V : Symbol(V, Decl(intersectionsOfLargeUnions.ts, 19, 41))
84+
85+
if (assertNodeTagName(node, tagName)) {
86+
>assertNodeTagName : Symbol(assertNodeTagName, Decl(intersectionsOfLargeUnions.ts, 5, 1))
87+
>node : Symbol(node, Decl(intersectionsOfLargeUnions.ts, 20, 43))
88+
>tagName : Symbol(tagName, Decl(intersectionsOfLargeUnions.ts, 20, 61))
89+
90+
node[prop];
91+
>node : Symbol(node, Decl(intersectionsOfLargeUnions.ts, 20, 43))
92+
>prop : Symbol(prop, Decl(intersectionsOfLargeUnions.ts, 20, 73))
93+
}
94+
}
95+
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
=== tests/cases/compiler/intersectionsOfLargeUnions.ts ===
2+
// Repro from #23977
3+
4+
export function assertIsElement(node: Node | null): node is Element {
5+
>assertIsElement : (node: Node | null) => node is Element
6+
>node : Node | null
7+
>Node : Node
8+
>null : null
9+
>node : any
10+
>Element : Element
11+
12+
let nodeType = node === null ? null : node.nodeType;
13+
>nodeType : number | null
14+
>node === null ? null : node.nodeType : number | null
15+
>node === null : boolean
16+
>node : Node | null
17+
>null : null
18+
>null : null
19+
>node.nodeType : number
20+
>node : Node
21+
>nodeType : number
22+
23+
return nodeType === 1;
24+
>nodeType === 1 : boolean
25+
>nodeType : number | null
26+
>1 : 1
27+
}
28+
29+
export function assertNodeTagName<
30+
>assertNodeTagName : <T extends "symbol" | "object" | "a" | "abbr" | "acronym" | "address" | "applet" | "area" | "article" | "aside" | "audio" | "b" | "base" | "basefont" | "bdo" | "big" | "blockquote" | "body" | "br" | "button" | "canvas" | "caption" | "center" | "cite" | "code" | "col" | "colgroup" | "data" | "datalist" | "dd" | "del" | "dfn" | "dir" | "div" | "dl" | "dt" | "em" | "embed" | "fieldset" | "figcaption" | "figure" | "font" | "footer" | "form" | "frame" | "frameset" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "head" | "header" | "hgroup" | "hr" | "html" | "i" | "iframe" | "img" | "input" | "ins" | "isindex" | "kbd" | "keygen" | "label" | "legend" | "li" | "link" | "listing" | "map" | "mark" | "marquee" | "menu" | "meta" | "meter" | "nav" | "nextid" | "nobr" | "noframes" | "noscript" | "ol" | "optgroup" | "option" | "output" | "p" | "param" | "picture" | "plaintext" | "pre" | "progress" | "q" | "rt" | "ruby" | "s" | "samp" | "script" | "section" | "select" | "slot" | "small" | "source" | "span" | "strike" | "strong" | "style" | "sub" | "sup" | "table" | "tbody" | "td" | "template" | "textarea" | "tfoot" | "th" | "thead" | "time" | "title" | "tr" | "track" | "tt" | "u" | "ul" | "var" | "video" | "wbr" | "xmp" | "circle" | "clippath" | "defs" | "desc" | "ellipse" | "feblend" | "fecolormatrix" | "fecomponenttransfer" | "fecomposite" | "feconvolvematrix" | "fediffuselighting" | "fedisplacementmap" | "fedistantlight" | "feflood" | "fefunca" | "fefuncb" | "fefuncg" | "fefuncr" | "fegaussianblur" | "feimage" | "femerge" | "femergenode" | "femorphology" | "feoffset" | "fepointlight" | "fespecularlighting" | "fespotlight" | "fetile" | "feturbulence" | "filter" | "foreignobject" | "g" | "image" | "line" | "lineargradient" | "marker" | "mask" | "metadata" | "path" | "pattern" | "polygon" | "polyline" | "radialgradient" | "rect" | "stop" | "svg" | "switch" | "text" | "textpath" | "tspan" | "use" | "view", U extends ElementTagNameMap[T]>(node: Node | null, tagName: T) => node is U
31+
32+
T extends keyof ElementTagNameMap,
33+
>T : T
34+
>ElementTagNameMap : ElementTagNameMap
35+
36+
U extends ElementTagNameMap[T]>(node: Node | null, tagName: T): node is U {
37+
>U : U
38+
>ElementTagNameMap : ElementTagNameMap
39+
>T : T
40+
>node : Node | null
41+
>Node : Node
42+
>null : null
43+
>tagName : T
44+
>T : T
45+
>node : any
46+
>U : U
47+
48+
if (assertIsElement(node)) {
49+
>assertIsElement(node) : boolean
50+
>assertIsElement : (node: Node | null) => node is Element
51+
>node : Node | null
52+
53+
const nodeTagName = node.tagName.toLowerCase();
54+
>nodeTagName : string
55+
>node.tagName.toLowerCase() : string
56+
>node.tagName.toLowerCase : () => string
57+
>node.tagName : string
58+
>node : Element
59+
>tagName : string
60+
>toLowerCase : () => string
61+
62+
return nodeTagName === tagName;
63+
>nodeTagName === tagName : boolean
64+
>nodeTagName : string
65+
>tagName : T
66+
}
67+
return false;
68+
>false : false
69+
}
70+
71+
export function assertNodeProperty<
72+
>assertNodeProperty : <T extends "symbol" | "object" | "a" | "abbr" | "acronym" | "address" | "applet" | "area" | "article" | "aside" | "audio" | "b" | "base" | "basefont" | "bdo" | "big" | "blockquote" | "body" | "br" | "button" | "canvas" | "caption" | "center" | "cite" | "code" | "col" | "colgroup" | "data" | "datalist" | "dd" | "del" | "dfn" | "dir" | "div" | "dl" | "dt" | "em" | "embed" | "fieldset" | "figcaption" | "figure" | "font" | "footer" | "form" | "frame" | "frameset" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "head" | "header" | "hgroup" | "hr" | "html" | "i" | "iframe" | "img" | "input" | "ins" | "isindex" | "kbd" | "keygen" | "label" | "legend" | "li" | "link" | "listing" | "map" | "mark" | "marquee" | "menu" | "meta" | "meter" | "nav" | "nextid" | "nobr" | "noframes" | "noscript" | "ol" | "optgroup" | "option" | "output" | "p" | "param" | "picture" | "plaintext" | "pre" | "progress" | "q" | "rt" | "ruby" | "s" | "samp" | "script" | "section" | "select" | "slot" | "small" | "source" | "span" | "strike" | "strong" | "style" | "sub" | "sup" | "table" | "tbody" | "td" | "template" | "textarea" | "tfoot" | "th" | "thead" | "time" | "title" | "tr" | "track" | "tt" | "u" | "ul" | "var" | "video" | "wbr" | "xmp" | "circle" | "clippath" | "defs" | "desc" | "ellipse" | "feblend" | "fecolormatrix" | "fecomponenttransfer" | "fecomposite" | "feconvolvematrix" | "fediffuselighting" | "fedisplacementmap" | "fedistantlight" | "feflood" | "fefunca" | "fefuncb" | "fefuncg" | "fefuncr" | "fegaussianblur" | "feimage" | "femerge" | "femergenode" | "femorphology" | "feoffset" | "fepointlight" | "fespecularlighting" | "fespotlight" | "fetile" | "feturbulence" | "filter" | "foreignobject" | "g" | "image" | "line" | "lineargradient" | "marker" | "mask" | "metadata" | "path" | "pattern" | "polygon" | "polyline" | "radialgradient" | "rect" | "stop" | "svg" | "switch" | "text" | "textpath" | "tspan" | "use" | "view", P extends keyof ElementTagNameMap[T], V extends HTMLElementTagNameMap[T][P]>(node: Node | null, tagName: T, prop: P, value: V) => void
73+
74+
T extends keyof ElementTagNameMap,
75+
>T : T
76+
>ElementTagNameMap : ElementTagNameMap
77+
78+
P extends keyof ElementTagNameMap[T],
79+
>P : P
80+
>ElementTagNameMap : ElementTagNameMap
81+
>T : T
82+
83+
V extends HTMLElementTagNameMap[T][P]>(node: Node | null, tagName: T, prop: P, value: V) {
84+
>V : V
85+
>HTMLElementTagNameMap : HTMLElementTagNameMap
86+
>T : T
87+
>P : P
88+
>node : Node | null
89+
>Node : Node
90+
>null : null
91+
>tagName : T
92+
>T : T
93+
>prop : P
94+
>P : P
95+
>value : V
96+
>V : V
97+
98+
if (assertNodeTagName(node, tagName)) {
99+
>assertNodeTagName(node, tagName) : boolean
100+
>assertNodeTagName : <T extends "symbol" | "object" | "a" | "abbr" | "acronym" | "address" | "applet" | "area" | "article" | "aside" | "audio" | "b" | "base" | "basefont" | "bdo" | "big" | "blockquote" | "body" | "br" | "button" | "canvas" | "caption" | "center" | "cite" | "code" | "col" | "colgroup" | "data" | "datalist" | "dd" | "del" | "dfn" | "dir" | "div" | "dl" | "dt" | "em" | "embed" | "fieldset" | "figcaption" | "figure" | "font" | "footer" | "form" | "frame" | "frameset" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "head" | "header" | "hgroup" | "hr" | "html" | "i" | "iframe" | "img" | "input" | "ins" | "isindex" | "kbd" | "keygen" | "label" | "legend" | "li" | "link" | "listing" | "map" | "mark" | "marquee" | "menu" | "meta" | "meter" | "nav" | "nextid" | "nobr" | "noframes" | "noscript" | "ol" | "optgroup" | "option" | "output" | "p" | "param" | "picture" | "plaintext" | "pre" | "progress" | "q" | "rt" | "ruby" | "s" | "samp" | "script" | "section" | "select" | "slot" | "small" | "source" | "span" | "strike" | "strong" | "style" | "sub" | "sup" | "table" | "tbody" | "td" | "template" | "textarea" | "tfoot" | "th" | "thead" | "time" | "title" | "tr" | "track" | "tt" | "u" | "ul" | "var" | "video" | "wbr" | "xmp" | "circle" | "clippath" | "defs" | "desc" | "ellipse" | "feblend" | "fecolormatrix" | "fecomponenttransfer" | "fecomposite" | "feconvolvematrix" | "fediffuselighting" | "fedisplacementmap" | "fedistantlight" | "feflood" | "fefunca" | "fefuncb" | "fefuncg" | "fefuncr" | "fegaussianblur" | "feimage" | "femerge" | "femergenode" | "femorphology" | "feoffset" | "fepointlight" | "fespecularlighting" | "fespotlight" | "fetile" | "feturbulence" | "filter" | "foreignobject" | "g" | "image" | "line" | "lineargradient" | "marker" | "mask" | "metadata" | "path" | "pattern" | "polygon" | "polyline" | "radialgradient" | "rect" | "stop" | "svg" | "switch" | "text" | "textpath" | "tspan" | "use" | "view", U extends ElementTagNameMap[T]>(node: Node | null, tagName: T) => node is U
101+
>node : Node | null
102+
>tagName : T
103+
104+
node[prop];
105+
>node[prop] : ElementTagNameMap[T][P]
106+
>node : ElementTagNameMap[T]
107+
>prop : P
108+
}
109+
}
110+

0 commit comments

Comments
 (0)