Skip to content

Commit 3988115

Browse files
committed
feat: allow undefined when property optional for exactOptionalPropertyTypes
1 parent 0d9cee8 commit 3988115

File tree

3 files changed

+6
-3
lines changed

3 files changed

+6
-3
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/StructuredMemberWriter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ void writeMembers(TypeScriptWriter writer, Shape shape) {
106106
String optionalSuffix = shape.isUnionShape() || !isRequiredMember(member) ? "?" : "";
107107
String typeSuffix = requiredMemberMode == RequiredMemberMode.NULLABLE
108108
&& isRequiredMember(member) ? " | undefined" : "";
109+
if (optionalSuffix.equals("?")) {
110+
typeSuffix = " | undefined"; // support exactOptionalPropertyTypes.
111+
}
109112
writer.write("${L}${L}${L}: ${T}${L};", memberPrefix, memberName, optionalSuffix,
110113
symbolProvider.toSymbol(member), typeSuffix);
111114

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/TypeScriptSettings.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,7 @@ public enum RequiredMemberMode {
558558
NULLABLE("nullable"),
559559

560560
/**
561-
* This will dissallow members marked as {@link RequiredTrait} to be {@code undefined}.
561+
* This will disallow members marked as {@link RequiredTrait} to be {@code undefined}.
562562
* Use this mode with CAUTION because it comes with certain risks. When a server drops
563563
* {@link RequiredTrait} from an output shape (and it is replaced with {@link DefaultTrait}
564564
* as defined by the spec), if the server does not always serialize a value,

smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/StructureGeneratorTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public void properlyGeneratesOptionalNonMessageMemberOfException() {
8181
"export class Err extends __BaseException {\n"
8282
+ " readonly name: \"Err\" = \"Err\";\n"
8383
+ " readonly $fault: \"client\" = \"client\";\n"
84-
+ " foo?: string;\n"
84+
+ " foo?: string | undefined;\n"
8585
+ " /**\n"
8686
+ " * @internal\n"
8787
+ " */\n"
@@ -525,7 +525,7 @@ public void generatesNonErrorStructures() {
525525
String output = writer.toString();
526526

527527
assertThat(output, containsString("export interface Bar {"));
528-
assertThat(output, containsString("foo?: string;"));
528+
assertThat(output, containsString("foo?: string | undefined;"));
529529
}
530530

531531
private StructureShape createNonErrorStructure() {

0 commit comments

Comments
 (0)