From 2bf02785d9aef8b7b265d41cd45e2519a7e04bb4 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 21 Sep 2026 20:57:36 +0100 Subject: Support Option in typescript-types --- .../output/generators/typescript/TypescriptGenerator.java | 11 +++++++++++ .../compiler/output/lang/typescript/TypescriptTypes.java | 2 ++ 2 files changed, 13 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java index 25435c5..44bad46 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java @@ -1,6 +1,7 @@ package org.zwobble.hobgoblin.compiler.output.generators.typescript; import org.zwobble.hobgoblin.compiler.builtins.NativeTypes; +import org.zwobble.hobgoblin.compiler.output.lang.typescript.TypescriptTypes; import org.zwobble.hobgoblin.compiler.output.lang.typescript.TypescriptWriter; import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.*; import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo; @@ -11,6 +12,7 @@ import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.util.LinkedHashSet; +import java.util.List; import java.util.SequencedSet; import java.util.stream.Collectors; @@ -81,6 +83,15 @@ public class TypescriptGenerator { public TypescriptExpression generateTypeExpression(Type value, Context context) { return switch (collapseType(value)) { case ConstructedType constructedType -> { + if (constructedType.constructor().equals(NativeTypes.OPTION)) { + // TODO: How to deal with nested options? Forbid them in + // hobgoblin? + yield new TypescriptTypeUnion(List.of( + generateTypeExpression(constructedType.args().getFirst(), context), + TypescriptTypes.NULL + )); + } + yield new TypescriptConstructedType( generateTypeExpression(constructedType.constructor().genericType(), context), constructedType.args().stream() diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptTypes.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptTypes.java index 22f24a3..e6fa609 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptTypes.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptTypes.java @@ -1,5 +1,6 @@ package org.zwobble.hobgoblin.compiler.output.lang.typescript; +import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression; import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier; import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptRef; @@ -7,6 +8,7 @@ public class TypescriptTypes { private TypescriptTypes() { } + public static final TypescriptExpression NULL = new TypescriptRef(TypescriptIdentifier.of("null")); public static final TypescriptRef NUMBER = new TypescriptRef(TypescriptIdentifier.of("number")); public static final TypescriptRef READONLY_ARRAY = new TypescriptRef(TypescriptIdentifier.of("ReadonlyArray")); public static final TypescriptRef SYMBOL = new TypescriptRef(TypescriptIdentifier.of("Symbol")); -- cgit v1.2.3