Skip to content

Commit bd5977f

Browse files
ark120202Perryvw
authored andcommitted
Fix readonly tuple detection (TypeScriptToLua#674)
1 parent dee4e40 commit bd5977f

2 files changed

Lines changed: 13 additions & 4 deletions

File tree

src/TSHelper.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,12 +167,12 @@ export function isExplicitArrayType(type: ts.Type, checker: ts.TypeChecker, prog
167167
return type.types.some(t => isExplicitArrayType(t, checker, program));
168168
}
169169

170-
if (isStandardLibraryType(type, "ReadonlyArray", program)) {
171-
return true;
170+
const flags = ts.NodeBuilderFlags.InTypeAlias | ts.NodeBuilderFlags.AllowEmptyTuple;
171+
let typeNode = checker.typeToTypeNode(type, undefined, flags);
172+
if (typeNode && ts.isTypeOperatorNode(typeNode) && typeNode.operator === ts.SyntaxKind.ReadonlyKeyword) {
173+
typeNode = typeNode.type;
172174
}
173175

174-
const flags = ts.NodeBuilderFlags.InTypeAlias | ts.NodeBuilderFlags.AllowEmptyTuple;
175-
const typeNode = checker.typeToTypeNode(type, undefined, flags);
176176
return typeNode !== undefined && (ts.isArrayTypeNode(typeNode) || ts.isTupleTypeNode(typeNode));
177177
}
178178

test/unit/tuples.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@ test("Tuple access", () => {
3131
expect(result).toBe(5);
3232
});
3333

34+
test("Readonly Tuple access", () => {
35+
const result = util.transpileAndExecute(
36+
`const tuple: readonly [number, number, number] = [3,5,1];
37+
return tuple[1];`
38+
);
39+
40+
expect(result).toBe(5);
41+
});
42+
3443
test("Tuple union access", () => {
3544
const result = util.transpileAndExecute(
3645
`function makeTuple(): [number, number, number] | [string, string, string] { return [3,5,1]; }

0 commit comments

Comments
 (0)