From 5d6812914831a386997b453b4db1e3283e26005d Mon Sep 17 00:00:00 2001 From: Ben Lichtman Date: Tue, 9 Jun 2020 12:58:08 -0700 Subject: [PATCH] fix(typescript-estree): handle TS4.0 breaking change in TupleType (#2197) --- .prettierignore | 1 + packages/typescript-estree/src/convert.ts | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.prettierignore b/.prettierignore index 2578aad23b7..5155a78aa50 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,6 +5,7 @@ **/shared-fixtures **/.vscode **/.nyc_output +**/.vs packages/eslint-plugin-tslint/tests/test-tslint-rules-directory/alwaysFailRule.js .github packages/eslint-plugin/src/configs/*.json diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index 44279a76d97..2a6db370570 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -2617,9 +2617,16 @@ export class Converter { }); } case SyntaxKind.TupleType: { + // In TS 4.0, the `elementTypes` property was changed to `elements`. + // To support both at compile time, we cast to access the newer version + // if the former does not exist. + const elementTypes = node.elementTypes + ? node.elementTypes.map(el => this.convertType(el)) + : (node as any).elements.map((el: ts.Node) => this.convertType(el)); + return this.createNode(node, { type: AST_NODE_TYPES.TSTupleType, - elementTypes: node.elementTypes.map(el => this.convertType(el)), + elementTypes, }); } case SyntaxKind.UnionType: {