我正在使用一个具有如下声明类型的库:
type MyType = "value1" | "value2" | "value3";
我想创建一个对象,其中包含随机选择的可能值之一的值。
我原本以为
MyType
类型被定义为enum
,但实际上它的定义如上。我引用了这个答案:https://stackoverflow.com/a/55699349
本质上,我正在寻找一种通用的解决方案来在运行时检索文字类型的可能值,然后随机获取其中一个。这是我正在寻找的非工作版本:TypeScript Playground
如有任何帮助,我们将不胜感激。谢谢!
我通过评论了解到这是不可能的,因为类型被删除了。更多详细信息请参见此处:https://www.typescriptlang.org/docs/handbook/2/basic-types.html#erased-types
将您的值定义为常规数组,并将其用于两者您的输入并在运行时生成随机选择。
这在 TS 3.4 中是可能的,使用 const 断言。
步骤
1。创建一个数组,并在末尾添加
as const
。
const myValues = ['value1', 'value2', 'value3'] as const
2。使用数组创建类型
使用
typeof someArray[number]
最终成为数组中所有条目的并集;类型只能是数组条目。
type myType = typeof myValues[number]
3.选择随机数组条目
对于
myType
的实例,选择一个随机数组条目,或执行任何您想要设置的值。仅允许数组条目(通过 Typescript)。
旁注:为了运行时类型安全,您可能需要查看 Zod 或等效的运行时类型检查器。这将改变你定义真相来源的方式。
const someInstance:myType = myValues[myValues.length * Math.random() | 0]
或者只是设置明确的值:
// Fails (typescript warning because it doesn't exist in the array)
const someInstance:myType = 'Foo'
// Works (no typescript warning)
const someInstance:myType = 'value3'