繁体   English   中英

将 object 值转换为 TypeScript 中的类枚举类型

[英]Convert object values to enum-like type in TypeScript

ParsedParametersObject["--mode"]的类型必须是Parameters[ValidFirstCommandPhrases.buildProject].mode.values 目前它已被硬编码,因此当将新支持的模式添加到应用程序时,我们需要编辑Parameters[ValidFirstCommandPhrases.buildProject].mode.valuesParsedParametersObject

如何将Parameters[ValidFirstCommandPhrases.buildProject].mode.values转换为有效的类枚举类型?

enum ValidFirstCommandPhrases {
 initializeProject = "initializeProject",
 buildProject = "buildProject"
}

export const Parameters = {
    [ValidFirstCommandPhrases.buildProject]: {
      mode: {
        name__includingDoubleNDash: "--mode",
        values: {
          development: "development",
          production: "production",
        }
      },
      debug: {
       name__includingDoubleNDash: "--debug"
     }
  }
} as const;

type ParsedParametersObject = {
    // --mode
  [Parameters[ValidFirstCommandPhrases.buildProject].mode.name__includingDoubleNDash]:
    "development" | "production"; // Hardcoded!!
}

您可以使用的一个选项是拥有一个专用的ENVIRONMENTS枚举并将其用作ParsedParametersObject["--mode"]类型中的类型。

见下文

enum ValidFirstCommandPhrases {
 initializeProject = "initializeProject",
 buildProject = "buildProject"
}

enum ENVIRONMENTS {
    DEVELOPMENT = 'development',
    PRODUCTION = 'production'
}

export const Parameters = {
    [ValidFirstCommandPhrases.buildProject]: {
      mode: {
        name__includingDoubleNDash: "--mode",
        values: {
          development: ENVIRONMENTS.DEVELOPMENT,
          production: ENVIRONMENTS.PRODUCTION,
        }
      },
      debug: {
       name__includingDoubleNDash: "--debug"
     }
  }
} as const;

type ParsedParametersObject = {
    // --mode
  [Parameters[ValidFirstCommandPhrases.buildProject].mode.name__includingDoubleNDash]: 
ENVIRONMENTS;
}

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM