From 4c82a2849f0dba8f6c51c7facbd95e68c388d324 Mon Sep 17 00:00:00 2001 From: ark120202 Date: Fri, 19 Jul 2019 19:17:36 +0500 Subject: [PATCH] Fix readonly tuple detection --- src/TSHelper.ts | 8 ++++---- test/unit/tuples.spec.ts | 9 +++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/TSHelper.ts b/src/TSHelper.ts index 6a9dc5a32..0d8276aa9 100644 --- a/src/TSHelper.ts +++ b/src/TSHelper.ts @@ -167,12 +167,12 @@ export function isExplicitArrayType(type: ts.Type, checker: ts.TypeChecker, prog return type.types.some(t => isExplicitArrayType(t, checker, program)); } - if (isStandardLibraryType(type, "ReadonlyArray", program)) { - return true; + const flags = ts.NodeBuilderFlags.InTypeAlias | ts.NodeBuilderFlags.AllowEmptyTuple; + let typeNode = checker.typeToTypeNode(type, undefined, flags); + if (typeNode && ts.isTypeOperatorNode(typeNode) && typeNode.operator === ts.SyntaxKind.ReadonlyKeyword) { + typeNode = typeNode.type; } - const flags = ts.NodeBuilderFlags.InTypeAlias | ts.NodeBuilderFlags.AllowEmptyTuple; - const typeNode = checker.typeToTypeNode(type, undefined, flags); return typeNode !== undefined && (ts.isArrayTypeNode(typeNode) || ts.isTupleTypeNode(typeNode)); } diff --git a/test/unit/tuples.spec.ts b/test/unit/tuples.spec.ts index 0f6aa6a39..4f527f29f 100644 --- a/test/unit/tuples.spec.ts +++ b/test/unit/tuples.spec.ts @@ -31,6 +31,15 @@ test("Tuple access", () => { expect(result).toBe(5); }); +test("Readonly Tuple access", () => { + const result = util.transpileAndExecute( + `const tuple: readonly [number, number, number] = [3,5,1]; + return tuple[1];` + ); + + expect(result).toBe(5); +}); + test("Tuple union access", () => { const result = util.transpileAndExecute( `function makeTuple(): [number, number, number] | [string, string, string] { return [3,5,1]; }