【问题标题】:Typescript how to pass enum as Parameter [duplicate]打字稿如何将枚举作为参数传递[重复]
【发布时间】:2017-07-19 19:32:32
【问题描述】:

如何传递定义为参数的枚举类型。在下图底部查看我的使用情况。

【问题讨论】:

  • 请粘贴代码而不是代码的图像。它可以帮助那些试图帮助你的人。
  • 感谢您提供的链接包含适合我的案例的最佳解决方案

标签: typescript enums


【解决方案1】:

对于任何enum,请使用any

function getText(enumValue: number, typeEnum: any): string;

要限制可能的枚举,请使用联合类型。

function getText(enumValue: number, typeEnum: typeof Car | typeof Color): string;

【讨论】:

  • 感谢此解决方案有效
  • 这行得通,但我真的希望有更好的方法。我不太明白为什么我们不能制作这样的函数:function getText<E>(enumValue: number, typeEnum: E): string;
【解决方案2】:

我认为没有一种简单的方法可以像您想要的那样说“仅支持枚举”。不过,您有一些选择。你可以继续添加你想要支持的枚举:

enum Color {};
enum Car {};
type SupportedEnums = typeof Color | typeof Car;
function getText(enumValue: number, typeEnum: SupportedEnums) {
    retrun `${enumValue}(${typeEnum[enumValue]})`;
}

或者,不用维护SupportedEnums,直接使用any类型。

====

原答案:

您可以使用typeof引用类型:

getText(enumValue: number, typeEnum: typeof Color): string {
    return typeEnum[enumValue];
}

【讨论】:

  • 这在我的情况下不起作用,因为这个 getText 函数将与 2 种不同的枚举类型一起使用。在图片底部查看我的用例。我正在寻找一个通用函数来传递任何类型的枚举。
  • 这对我也不起作用。我收到此错误:TS2693: 'Color' only refers to a type, but is being used as a value here.
  • 我将更新发布到该帖子被标记为重复的帖子。 IMO 以更多代码为代价对类型检查进行了改进。 stackoverflow.com/questions/30774874/…
猜你喜欢
  • 2020-06-22
  • 2012-04-18
  • 1970-01-01
  • 2018-10-30
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多