遇到一个奇怪的问题:在参数内创建数组可以进行传入到z.enum(),但是在参数外创建的不能进行传入:
import * as z from 'zod';
const WINDOW_EVENTS2 = [
'EVENT_UPDATE_DATA',
'EVENT_REARRANGE'
]
const windowEventsSchema = z.enum(WINDOW_EVENTS2); // 会报错:没有与此调用匹配的重载
这样就可以:
const Schema = z.enum(['EVENT_UPDATE_DATA', 'EVENT_REARRANGE']);
报错信息:
没有与此调用匹配的重载。
第 1 个重载(共 2 个),“(values: readonly [string, ...string[]], params?: RawCreateParams): ZodEnum<[string, ...string[]]>”,出现以下错误。
类型“string[]”的参数不能赋给类型“readonly [string, ...string[]]”的参数。
源不提供目标中位置 0 处所需元素的匹配项。
第 2 个重载(共 2 个),“(values: [string, ...string[]], params?: RawCreateParams): ZodEnum<[string, ...string[]]>”,出现以下错误。
类型“string[]”的参数不能赋给类型“[string, ...string[]]”的参数。
源不提供目标中位置 0 处所需元素的匹配项。ts(2769)
定义时候添加:as const即可: