Skip to content

Commit 685cd3e

Browse files
committed
fix: Crash when converting a generic with a tuple constraint
Closes #1449
1 parent 0c3b1a0 commit 685cd3e

File tree

3 files changed

+130
-50
lines changed

3 files changed

+130
-50
lines changed

src/lib/converter/types.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -805,13 +805,17 @@ const tupleConverter: TypeConverter<ts.TupleTypeNode, ts.TupleType> = {
805805
return new TupleType(elements);
806806
},
807807
convertType(context, type, node) {
808-
let elements = type.typeArguments?.map((type) =>
809-
convertType(context, type)
810-
);
808+
// TS 3.9 support
809+
const elementTypes = node.elements ?? (node as any).elementTypes;
810+
// We need to do this because of type argument constraints, see GH1449
811+
const types = type.typeArguments?.slice(0, elementTypes.length);
812+
let elements = types?.map((type) => convertType(context, type));
811813

812-
// elements was called elementTypes in TS 3.9.
813-
// 3.9 doesn't have tuple members, so it's fine to skip this there.
814-
if (node.elements && node.elements.every(ts.isNamedTupleMember)) {
814+
// 3.9 doesn't have named tuple members, so it's fine to skip this there.
815+
if (
816+
ts.isNamedTupleMember &&
817+
elementTypes.every(ts.isNamedTupleMember)
818+
) {
815819
const namedMembers = node.elements as readonly ts.NamedTupleMember[];
816820
elements = elements?.map(
817821
(el, i) =>

0 commit comments

Comments
 (0)