summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-09-21 20:57:36 +0100
committerMichael Williamson <mike@zwobble.org>2026-09-21 20:57:36 +0100
commit2bf02785d9aef8b7b265d41cd45e2519a7e04bb4 (patch)
tree72765bd081280ca0a36ad5f820a0659b35ff66ee /src/main/java
parent8b601565c9e14aa673dca94bd79c84ad6f2f04f3 (diff)
Support Option in typescript-types
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java11
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptTypes.java2
2 files changed, 13 insertions, 0 deletions
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"));