October Monday,25th 2021: AM

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ファイルを作成し

declare namespace NodeJS {
 interface ProcessEnv {
 readonly NODE_ENV: 'development' | 'production' | 'test';
 readonly PUBLIC_URL: string;
 readonly SERVICE_DOMAIN: string;
 readonly API_KEY: string;
 }
}

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

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

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

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

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

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

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

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

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