为了账号安全,请及时绑定邮箱和手机立即绑定

泛型类型获取枚举键作为打字稿中的联合字符串?

泛型类型获取枚举键作为打字稿中的联合字符串?

蝴蝶刀刀 2019-11-02 14:28:22
考虑以下打字稿枚举:enum MyEnum { A, B, C };如果我想要另一个类型是该枚举的键的联合字符串,则可以执行以下操作:type MyEnumKeysAsStrings = keyof typeof MyEnum;  // "A" | "B" | "C"这是非常有用的。现在,我想创建一个通用类型,以这种方式对枚举进行通用操作,这样我可以改为:type MyEnumKeysAsStrings = AnyEnumKeysAsStrings<MyEnum>;我想正确的语法是:type AnyEnumKeysAsStrings<TEnum> = keyof typeof TEnum; // TS Error: 'TEnum' only refers to a type, but is being used as a value here.但这会产生编译错误:“'TEnum'仅引用类型,但在此处被用作值。”这是意外和悲伤的。我可以通过以下方式通过使用泛型声明的右侧删除typeof并将其添加到特定类型的声明中的type参数中来解决此问题:type AnyEnumAsUntypedKeys<TEnum> = keyof TEnum;type MyEnumKeysAsStrings = AnyEnumAsUntypedKeys<typeof MyEnum>; // works, but not kind to consumer.  Ick.不过,我不喜欢这种解决方法,因为这意味着使用者必须记住在通用类型上仔细地指定typeof。有什么语法可以让我指定我最初想要的通用类型,以便对消费者友好?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 527 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信