typescript-generatorにプリミティブ型を必須プロパティ(non null)にするオプションが追加されていた

以前書いた記事の段階では、 typescript-generatorrequiredAnnotations を指定すると、プリミティブ型のフィールド/GetterについてもOptional Properties(null設定可能)扱いとなっていた。

2021年3月の更新で、プリミティブ型をまとめて必須(非null)にできるオプションが追加されていたのでメモ。

環境

typescript-generator 2.30.840

追加されたオプション

primitivePropertiesRequired という boolean 型のパラメーターが追加されている。プロパティの説明はこちら

optionalProperties がデフォルトの useSpecifiedAnnotations の場合、 requiredAnnotations を指定していなければ各プロパティは必須になるため、 primitivePropertiesRequiredrequiredAnnotations との併用前提と思われる。

Gradleであれば、以下のように generateTypeScript タスクにパラメーターを追加するだけでいい。

generateTypeScript {
  // 中略, requiredAnnotations 指定済み

  primitivePropertiesRequired = true
}

使用例

以前の記事から設定およびクラスを流用。

build.gradle の変更箇所は以下。

buildscript {
  // 中略
  dependencies {
    // バージョンを 2.30.840 に変更
    classpath 'cz.habarta.typescript-generator:typescript-generator-gradle-plugin:2.30.840'
  }
}

generateTypeScript {
  // 中略  
  primitivePropertiesRequired = true
}

出力対象のクラスは前回のリクエストクラスをそのまま流用。

package hepokon365.request;
@lombok.Data
public class ExampleRequest implements java.io.Serializable {
    @javax.validation.constraints.NotNull
    private String stringValue;
    private boolean booleanValue;
    private hepokon365.enums.ExampleEnum enumValue;
}

出力結果は、以下のように、従来はオプションプロパティだった booleanValue が、プリミティブ型のため必須プロパティとなる。

export namespace Endpoint {
  export interface ExampleRequest {
    stringValue: string;
    booleanValue: boolean;
    enumValue?: ExampleEnum | null;
  }
}

振り返り

プリミティブ型に @javax.validation.constraints.NotNull などのnullチェックアノテーションをつけると、IDEから警告が出たりするため、運用として boolean なら Booleanint なら Integer などのラッパークラスにしてアノテーションを付与することで対応していた。

とはいえ、プリミティブ型のままであれば自明なことを、プラグインの仕様に合わせるため曲げてコーディングしていたことは否めないため、この変更はかなりうれしい。