Fix typescript generator params (#9524)
* Fix typescript generator params * add TSOptionalType, TSRestType, add more test
This commit is contained in:
parent
5bb1bb080f
commit
bbb4d7b6d7
@ -231,7 +231,7 @@ export function tsPrintBraced(members, node) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function TSArrayType(node) {
|
export function TSArrayType(node) {
|
||||||
this.print(node.elementType);
|
this.print(node.elementType, node);
|
||||||
this.token("[]");
|
this.token("[]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -136,6 +136,18 @@ export function TSTypeAssertion() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function TSUnionType(node: Object, parent: Object): boolean {
|
||||||
|
return (
|
||||||
|
t.isTSArrayType(parent) ||
|
||||||
|
t.isTSOptionalType(parent) ||
|
||||||
|
t.isTSIntersectionType(parent) ||
|
||||||
|
t.isTSUnionType(parent) ||
|
||||||
|
t.isTSRestType(parent)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export { TSUnionType as TSIntersectionType };
|
||||||
|
|
||||||
export function BinaryExpression(node: Object, parent: Object): boolean {
|
export function BinaryExpression(node: Object, parent: Object): boolean {
|
||||||
// let i = (1 in []);
|
// let i = (1 in []);
|
||||||
// for ((1 in []);;);
|
// for ((1 in []);;);
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
let union: number | null | undefined;
|
let union: number | null | undefined;
|
||||||
let intersection: number & string;
|
let intersection: number & string;
|
||||||
let precedence1: number | string & boolean;
|
let precedence1: number | (string & boolean);
|
||||||
let precedence2: number & string | boolean;
|
let precedence2: (number & string) | boolean;
|
||||||
@ -426,6 +426,40 @@ describe("programmatic generation", function() {
|
|||||||
}).toThrow();
|
}).toThrow();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("typescript generate parantheses if necessary", function() {
|
||||||
|
it("wraps around union for array", () => {
|
||||||
|
const typeStatement = t.TSArrayType(
|
||||||
|
t.TSUnionType([
|
||||||
|
t.TSIntersectionType([t.TSNumberKeyword(), t.TSBooleanKeyword()]),
|
||||||
|
t.TSNullKeyword(),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
const output = generate(typeStatement).code;
|
||||||
|
expect(output).toBe("((number & boolean) | null)[]");
|
||||||
|
});
|
||||||
|
it("wraps around intersection for array", () => {
|
||||||
|
const typeStatement = t.TSArrayType(
|
||||||
|
t.TSIntersectionType([t.TSNumberKeyword(), t.TSBooleanKeyword()]),
|
||||||
|
);
|
||||||
|
const output = generate(typeStatement).code;
|
||||||
|
expect(output).toBe("(number & boolean)[]");
|
||||||
|
});
|
||||||
|
it("wraps around rest", () => {
|
||||||
|
const typeStatement = t.tsRestType(
|
||||||
|
t.TSIntersectionType([t.TSNumberKeyword(), t.TSBooleanKeyword()]),
|
||||||
|
);
|
||||||
|
const output = generate(typeStatement).code;
|
||||||
|
expect(output).toBe("...(number & boolean)");
|
||||||
|
});
|
||||||
|
it("wraps around optional type", () => {
|
||||||
|
const typeStatement = t.tsOptionalType(
|
||||||
|
t.TSIntersectionType([t.TSNumberKeyword(), t.TSBooleanKeyword()]),
|
||||||
|
);
|
||||||
|
const output = generate(typeStatement).code;
|
||||||
|
expect(output).toBe("(number & boolean)?");
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("CodeGenerator", function() {
|
describe("CodeGenerator", function() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user