如何使用 TypeScript 键入枚举值?

Posted

技术标签:

【中文标题】如何使用 TypeScript 键入枚举值?【英文标题】:How to type enum values with TypeScript? 【发布时间】:2020-08-09 18:13:36 【问题描述】:

给定一个简单的enum

export enum IconNames 
  DEFAULT = 'DEFAULT',
  MOVE = 'MOVE',
  RESIZE = 'RESIZE',
  ADD = 'ADD',
  CANCEL = 'CANCEL',
  CLOSE = 'CLOSE',

我想在给定函数isTransform 中输入name 参数,所以我只会使用IconNames 值来调用它:

/* Tried `string` which doesn't work 
as `name` supposed to be enum's value */

const isTransform = (name: any) => [IconNames.MOVE, IconNames.RESIZE, IconNames.ADD].includes(name);

我必须为它构建一个界面吗?如何使用它?

How to build a type from enum values in TypeScript?

【问题讨论】:

我认为这很好地回答了你的问题:***.com/a/68747948/346005 【参考方案1】:

这似乎有效:

function isTransform(name: string): boolean 
  const transformValues: string[] = [IconNames.MOVE, IconNames.RESIZE, IconNames.ADD]
  return transformValues.indexOf(name) > -1

这也有效:

function isTransform(name: IconNames): boolean 
  const transformValues = [IconNames.MOVE, IconNames.RESIZE, IconNames.ADD]
  return transformValues.indexOf(name) > -1

这里的问题是,您是仅使用IconNames 值还是使用string 调用isTransform

【讨论】:

我更新了问题,抱歉,是的,我想用 IconNames 值来调用它 看我回答的第二个例子,它不是回答这个用例吗?

以上是关于如何使用 TypeScript 键入枚举值?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 TypeScript 枚举值作为类型?

如何使扩展运算符仅通过非函数属性枚举?

如何正确键入返回 TypeScript 中的类的函数?

如何比较 TypeScript 中的枚举

如何键入检查名义类型的ID

使用默认值键入对象参数