Typescript:环境变量的类型 Guard 作为 JSON 对象的键

Posted

技术标签:

【中文标题】Typescript:环境变量的类型 Guard 作为 JSON 对象的键【英文标题】:Typescript: Type Guard for environment variable as key of JSON object 【发布时间】:2022-01-18 15:19:51 【问题描述】:

我正在尝试编写一个 Type Guard,以便 TypeScript 在我尝试基于某个键加载数据的最后一行不再抛出错误。不知何故,TypeScript 仍然认为环境变量是 string 而不是对象的已知键。因为它现在抛出:No index signature with a parameter of type 'string' was found on type...

我是否在这里遗漏了一些边缘情况,其中环境变量仍可能是 undefined 作为键?

import JsonData from '../data/data.json'

const doesKeyExist: (
  input: string | undefined
) => boolean = (input) =>
  input && JsonData.hasOwnProperty(input)

if (!doesKeyExist(process.env.SOME_VARIABLE))
  throw Error('Environment Variable not declared!')

const data = JsonData[process.env.NEXT_PUBLIC_TENANT_ID]

【问题讨论】:

【参考方案1】:

这似乎可以解决问题:

import JsonData from '../data/data.json'

function doesKeyExist(
  input: string | undefined
): input is keyof typeof CategoriesData 
  return !!(input && CategoriesData.hasOwnProperty(input))


if (!doesKeyExist(process.env.SOME_VARIABLE))
  throw Error('Environment Variable not declared, or key does not exist in config file!')

const data = JsonData[process.env.NEXT_PUBLIC_TENANT_ID]

【讨论】:

以上是关于Typescript:环境变量的类型 Guard 作为 JSON 对象的键的主要内容,如果未能解决你的问题,请参考以下文章

typescript auth.guard.4.ts

typescript guard3.routes.ts

typescript guard.routes2.ts

typescript guard.routes.ts

typescript auth.guard.ts

typescript 秋田AUTH-guard.ts