TypeScript枚举通用功能

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

我无法找出使用TypeScript枚举为yup生成oneOf架构的函数的正确类型。


以下内容按预期工作,并且返回类型为yup.MixSchema<SomeEnum>

const schema1 = yup.mixed<SomeEnum>().oneOf(Object.values(SomeEnum)); // yup.MixSchema<SomeEnum>

如果尝试使通用函数返回架构,则返回类型为yup.MixSchema<typeof SomeEnum>。注意typeof

const oneOfEnum = <T>(enumObject: T) =>
  yup.mixed<T>().oneOf(Object.values(enumObject));

const schema2 = oneOfEnum(SomeEnum); // yup.MixSchema<typeof SomeEnum>

https://codesandbox.io/s/yup-typescript-oneof-enum-vpvjn?file=/src/index.ts

typescript enums yup
1个回答
1
投票

您可以这样解决(更改参数类型以匹配Object.values的参数):

const oneOfEnum = <T>(enumObject: { [s: string]: T } | ArrayLike<T>) =>
  yup.mixed<T>().oneOf(Object.values(enumObject));
© www.soinside.com 2019 - 2024. All rights reserved.