declare namespace Node.JS ProcessEnvで環境変数の型を付けたメモ

microcms-js-sdkのapiKeyがstringなのに環境変数のNode.JS ProcessEnvがstring | undefinedのせいで

TSファイルとして型の整合性が取れない。

apiKey, serviceDomain, globalDraftKeyの型は、

root/node_modules/microcms-js-sdk/dist/cjs/types.d.tsのClientParamsからstringで定義されている。

ここの値をstring | undefinedに書き換えてもnode_modules内はサーバーにpushされない。

プロジェクトのルート直下にglobals.d.tsファイルを作成し

1declare namespace NodeJS {
2 interface ProcessEnv {
3 readonly NODE_ENV: 'development' | 'production' | 'test';
4 readonly PUBLIC_URL: string;
5 readonly SERVICE_DOMAIN: string;
6 readonly API_KEY: string;
7 }
8}

これでNodeJS.ProcessEnv内のundefinedを取ることが出来た。

元を辿って行けばなんでundefinedが入ってるのかを探した。

nodemodules/@types/node/process.d.tsの

1interface ProcessEnv extends Dict<string> {
2 /**
3* Can be used to change the default timezone at runtime
4 */
5TZ?: string;

このDict<string>を消したらprocess.envで呼び出す値の型が存在しませんになる。

ようするにDict<string>が string | undefinedの実態ということだった。

undefinedで全てサーチしたが string | undefinedは /types/nodeの中には見つからなかった。

clientがundefinedを返さないのは正しい実装ではないのだがSDK側がnode_modulesに格納されてるため今回この実装をした。

何はともあれこれで環境変数に直接型が付けられる。