diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-09-21 20:57:36 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-09-21 20:57:36 +0100 |
| commit | 2bf02785d9aef8b7b265d41cd45e2519a7e04bb4 (patch) | |
| tree | 72765bd081280ca0a36ad5f820a0659b35ff66ee /src/main/java | |
| parent | 8b601565c9e14aa673dca94bd79c84ad6f2f04f3 (diff) | |
Support Option in typescript-types
Diffstat (limited to 'src/main/java')
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")); |
