Skip to content

Commit

Permalink
[TS] Create TSUnionType or TSIntersectionType when typealias has …
Browse files Browse the repository at this point in the history
…a leading operator (#12758)

* Create `TSUnionType` or `TSIntersectionType` when typealias has a leading operator

* Apply code review suggestions

* Test `TSIntersectionType`
  • Loading branch information
fedeci committed Feb 5, 2021
1 parent 74ed698 commit eccbcca
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 13 deletions.
21 changes: 10 additions & 11 deletions packages/babel-parser/src/plugins/typescript/index.js
Expand Up @@ -936,17 +936,16 @@ export default (superClass: Class<Parser>): Class<Parser> =>
operator: TokenType,
): N.TsType {
const node: N.TsUnionType | N.TsIntersectionType = this.startNode();
this.eat(operator);
let type = parseConstituentType();
if (this.match(operator)) {
const types = [type];
while (this.eat(operator)) {
types.push(parseConstituentType());
}
node.types = types;
type = this.finishNode(node, kind);
}
return type;
const hasLeadingOperator = this.eat(operator);
const types = [];
do {
types.push(parseConstituentType());
} while (this.eat(operator));
if (types.length === 1 && !hasLeadingOperator) {
return types[0];
}
node.types = types;
return this.finishNode(node, kind);
}

tsParseIntersectionTypeOrHigher(): N.TsType {
Expand Down
Expand Up @@ -7,3 +7,5 @@ type J = number | string
type F = number & string
type K = | number | string
type M = & number & string
type N = | number
type O = & string
@@ -1,9 +1,9 @@
{
"type": "File",
"start":0,"end":265,"loc":{"start":{"line":1,"column":0},"end":{"line":9,"column":26}},
"start":0,"end":301,"loc":{"start":{"line":1,"column":0},"end":{"line":11,"column":17}},
"program": {
"type": "Program",
"start":0,"end":265,"loc":{"start":{"line":1,"column":0},"end":{"line":9,"column":26}},
"start":0,"end":301,"loc":{"start":{"line":1,"column":0},"end":{"line":11,"column":17}},
"sourceType": "module",
"interpreter": null,
"body": [
Expand Down Expand Up @@ -262,6 +262,44 @@
}
]
}
},
{
"type": "TSTypeAliasDeclaration",
"start":266,"end":283,"loc":{"start":{"line":10,"column":0},"end":{"line":10,"column":17}},
"id": {
"type": "Identifier",
"start":271,"end":272,"loc":{"start":{"line":10,"column":5},"end":{"line":10,"column":6},"identifierName":"N"},
"name": "N"
},
"typeAnnotation": {
"type": "TSUnionType",
"start":275,"end":283,"loc":{"start":{"line":10,"column":9},"end":{"line":10,"column":17}},
"types": [
{
"type": "TSNumberKeyword",
"start":277,"end":283,"loc":{"start":{"line":10,"column":11},"end":{"line":10,"column":17}}
}
]
}
},
{
"type": "TSTypeAliasDeclaration",
"start":284,"end":301,"loc":{"start":{"line":11,"column":0},"end":{"line":11,"column":17}},
"id": {
"type": "Identifier",
"start":289,"end":290,"loc":{"start":{"line":11,"column":5},"end":{"line":11,"column":6},"identifierName":"O"},
"name": "O"
},
"typeAnnotation": {
"type": "TSIntersectionType",
"start":293,"end":301,"loc":{"start":{"line":11,"column":9},"end":{"line":11,"column":17}},
"types": [
{
"type": "TSStringKeyword",
"start":295,"end":301,"loc":{"start":{"line":11,"column":11},"end":{"line":11,"column":17}}
}
]
}
}
],
"directives": []
Expand Down

0 comments on commit eccbcca

Please sign in to comment.