如何用 `io-ts` 表示原生枚举?

问题描述 投票:0回答:1

如果我有一个类似的枚举

enum Fruit {
  Apple = 'apple',
  Orange = 'orange',
}

如何使用

io-ts
类型解析这些值?

import * as t from 'io-ts';
const FruitCodec = new t.Type<Fruit, Fruit, unknown>(/* ... */);

其他库(例如 zod 的

nativeEnum
)拥有对此功能的第一方支持,但是如果我使用
io-ts
,我该怎么办?

typescript io-ts-library
1个回答
0
投票

我以前遇到过这个问题,过去我用

union
keyof
解决了它:

const FruitCodec = t.union([
  t.literal(Fruit.Apple),
  t.literal(Fruit.Orange),
]);
// or
const FruitCodec2 = t.keyof({
  [Fruit.Apple]: null,
  [Fruit.Orange]: null,
});

虽然这些方法有效,但感觉很冗长。使用

Object.values
的生成方法可能有效,但需要类型断言。希望其他人有更优雅的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.