Merge pull request #24137 from Microsoft/fix23977

Optimize intersections of unions of unit types
This commit is contained in:
Anders Hejlsberg
2018-05-17 13:15:28 -07:00
committed by GitHub
7 changed files with 355 additions and 4 deletions

View File

@@ -0,0 +1,27 @@
// @strict: true
// Repro from #23977
export function assertIsElement(node: Node | null): node is Element {
let nodeType = node === null ? null : node.nodeType;
return nodeType === 1;
}
export function assertNodeTagName<
T extends keyof ElementTagNameMap,
U extends ElementTagNameMap[T]>(node: Node | null, tagName: T): node is U {
if (assertIsElement(node)) {
const nodeTagName = node.tagName.toLowerCase();
return nodeTagName === tagName;
}
return false;
}
export function assertNodeProperty<
T extends keyof ElementTagNameMap,
P extends keyof ElementTagNameMap[T],
V extends HTMLElementTagNameMap[T][P]>(node: Node | null, tagName: T, prop: P, value: V) {
if (assertNodeTagName(node, tagName)) {
node[prop];
}
}