我正在使用一个用于TS生成的库(ts-protoc-gen),该库会为枚举生成以下内容:
export interface AnimalTypeMap {
Dog: 0;
Cat: 1;
Fish: 2;
Bird: 3;
}
export const AnimalType: AnimalTypeMap;
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
答案 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 枚举。它更直观。