打字稿如何省略枚举值

时间:2021-03-11 15:26:36

标签: reactjs typescript

我得到了枚举

enum Status {
  Cancelled = 'cancelled',
  Completed = 'completed',
  Created = 'created'
}

并且我只想使用 Completed 和 Created 值创建另一个枚举

enum StatusMinimal {
  Completed = 'completed',
  Created = 'created'
}

我尝试使用 Omit,但它仅适用于类型。甚至可以用打字稿来做吗?

3 个答案:

答案 0 :(得分:3)

您可以根据 StatusExclude 不需要的值定义属性/参数

function test(s: Exclude<Status, Status.Cancelled>): void {}


test(Status.Completed)
test(Status.Created)
test(Status.Cancelled) // not assignable

playground

答案 1 :(得分:1)

据我所知,没有简单的方法。 请参阅此similiar question

我将从 Minimal 开始,并从最小实现扩展 Status 枚举。 (我知道,不是你要求的)

答案 2 :(得分:-1)

这类似于this question。 您基本上可以使用内置的 TypeScript 实用程序类型 Exclude

或者你可以这样做:

enum StatusMinimal {
  Completed = 'completed',
  Created = 'created'
}

enum StatusExtended {
  Completed = 'completed',
  Created = 'created'
}

type Status = StatusMinimal | StatusExtended;