Typescript枚举作为接口

时间:2020-07-06 06:53:35

标签: typescript enums interface protobuf.js

我正在使用一个用于TS生成的库(ts-protoc-gen),该库会为枚举生成以下内容:

export interface AnimalTypeMap {
    Dog: 0;
    Cat: 1;
    Fish: 2;
    Bird: 3;
}

export const AnimalType: AnimalTypeMap;
  1. 我应该如何食用?
if (arg === AnimalType.Bird) {} // **ERROR**: Variable 'AnimalType' is used before being assigned
if (arg === AnimalTypeMap.Bird) {} // **ERROR**:'AnimalTypeMap' only refers to a type, but is being used as a value here
  1. 如何在不初始化的情况下导出const?

2 个答案:

答案 0 :(得分:0)

更改打字稿中的枚举类,例如波纹管

 export interface AnimalTypeMap 
     {
    Dog: Dog;
    Cat: Cat;
    Fish: Fish;
    Bird: Bird;
     }

并在后端使用

 [JsonConverter(typeof(StringEnumConverter))]
    public enum AnimalTypeMap {
{
        Dog: 1;
        Cat: 2;
        Fish: 3;
        Bird: 4;
         }

如果您使用c#

答案 1 :(得分:0)

如果您将 --ts-out 和 --js-out 都包含在 protoc 中,那么这对我有用:

import {AnimalType, AnimalTypeMap} from "./generated/AnimalType_pb"
const animalType:AnimalTypeMap[keyof AnimalTypeMap] = AnimalType.Bird;

但这并不完全直观,我认为这不是正确的方法。但至少它有效。

编辑:有一个叉子:https://github.com/gnomesley/ts-protoc-gen 可以生成普通的 TypeScript 枚举。它更直观。