TypeScript 4.0: Support labeled tuple elements (#11754)
* TypeScript 4.0: Support labeled tuple elements * More tests * Disallow mixing labeled and unlabeled elements * Update AST shape * Enable test after rebase * Allow labeled spread types * Fix flow * Add types and generator suport * Update packages/babel-parser/src/plugins/typescript/index.js * Prettier
This commit is contained in:
committed by
Huáng Jùnliàng
parent
9e6663f125
commit
eba4c3b6ed
@@ -923,6 +923,12 @@ export function assertTSOptionalType(node: Object, opts?: Object = {}): void {
|
||||
export function assertTSRestType(node: Object, opts?: Object = {}): void {
|
||||
assert("TSRestType", node, opts);
|
||||
}
|
||||
export function assertTSNamedTupleMember(
|
||||
node: Object,
|
||||
opts?: Object = {},
|
||||
): void {
|
||||
assert("TSNamedTupleMember", node, opts);
|
||||
}
|
||||
export function assertTSUnionType(node: Object, opts?: Object = {}): void {
|
||||
assert("TSUnionType", node, opts);
|
||||
}
|
||||
|
||||
@@ -894,6 +894,11 @@ export function tsRestType(...args: Array<any>): Object {
|
||||
}
|
||||
export { tsRestType as TSRestType };
|
||||
export { tsRestType as tSRestType };
|
||||
export function tsNamedTupleMember(...args: Array<any>): Object {
|
||||
return builder("TSNamedTupleMember", ...args);
|
||||
}
|
||||
export { tsNamedTupleMember as TSNamedTupleMember };
|
||||
export { tsNamedTupleMember as tSNamedTupleMember };
|
||||
export function tsUnionType(...args: Array<any>): Object {
|
||||
return builder("TSUnionType", ...args);
|
||||
}
|
||||
|
||||
@@ -214,7 +214,7 @@ defineType("TSTupleType", {
|
||||
aliases: ["TSType"],
|
||||
visitor: ["elementTypes"],
|
||||
fields: {
|
||||
elementTypes: validateArrayOfType("TSType"),
|
||||
elementTypes: validateArrayOfType(["TSType", "TSNamedTupleMember"]),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -234,6 +234,19 @@ defineType("TSRestType", {
|
||||
},
|
||||
});
|
||||
|
||||
defineType("TSNamedTupleMember", {
|
||||
visitor: ["label", "elementType"],
|
||||
builder: ["label", "elementType", "optional"],
|
||||
fields: {
|
||||
label: validateType("Identifier"),
|
||||
optional: {
|
||||
validate: bool,
|
||||
default: false,
|
||||
},
|
||||
elementType: validateType("TSType"),
|
||||
},
|
||||
});
|
||||
|
||||
const unionOrIntersection = {
|
||||
aliases: ["TSType"],
|
||||
visitor: ["types"],
|
||||
|
||||
@@ -3041,6 +3041,20 @@ export function isTSRestType(node: ?Object, opts?: Object): boolean {
|
||||
|
||||
return false;
|
||||
}
|
||||
export function isTSNamedTupleMember(node: ?Object, opts?: Object): boolean {
|
||||
if (!node) return false;
|
||||
|
||||
const nodeType = node.type;
|
||||
if (nodeType === "TSNamedTupleMember") {
|
||||
if (typeof opts === "undefined") {
|
||||
return true;
|
||||
} else {
|
||||
return shallowEqual(node, opts);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
export function isTSUnionType(node: ?Object, opts?: Object): boolean {
|
||||
if (!node) return false;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user