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に格納されてるため今回この実装をした。
何はともあれこれで環境変数に直接型が付けられる。