typescript 以字母开头的字符串的Zod模式

vojdkbi0  于 2023-02-20  发布在  TypeScript
关注(0)|答案(1)|浏览(158)

我在 typescript 中有这样的类型,字符串必须以A字母开头。

type StringStartsWithA = `A${string}`

当我想创建一个zod模式时,我使用的是:

const StringStartsWithASchema = z.string().startsWith("A")

但是,推断的类型只是一个普通的字符串。

type StringStartsWithA = z.infer<typeof Schema> // string

有没有办法解决这个问题,所以推断出的类型也要求以A字母开头?这样它就会匹配原始的 typescript 类型?

eqqqjvef

eqqqjvef1#

从文件上看
您可以使用z. custom()为任何TypeScript类型创建Zod模式,这对于为Zod不支持的现成类型(如模板字符串常量)创建模式非常有用。

const px = z.custom<`${number}px`>((val) => /^\d+px$/.test(val));
px.parse("100px"); // pass
px.parse("100vw"); // fail

因此,对于您的情况:

const StringStartsWithA = z.custom<`A${string}`>((val: any) => /^A/.test(val));
type StringStartsWithA = z.infer<typeof StringStartsWithA> // type StringStartsWithA = `A${string}`

相关问题