小编Sou*_*man的帖子

使用非可选但可能未定义的字段指定 Zod 模式

是否可以使用可能undefined但非可选的字段来定义 Zod 模式。在 TypeScript 中,这是以下之间的区别:

interface IFoo1 {
  somefield: string | undefined;
}

interface IFoo2 {
  somefield?: string | undefined;
}

const schema = z.object({
  somefield: z.union([z.string(), z.undefined()]),
}); // Results in something like IFoo2
Run Code Online (Sandbox Code Playgroud)

据我所知,使用z.union([z.string(), z.undefined()])orz.string().optional()导致该字段相当于IFoo2.

我想知道是否有一种方法可以指定行为类似于IFoo1.

背景/理由

我可能想做这样的事情的原因是迫使开发人员思考该字段是否应该是undefined. 当该字段是可选的时,在构造该类型的对象时可能会意外丢失该字段。一个具体的例子可能是这样的:

interface IConfig {
  name: string;
  emailPreference: boolean | undefined;
}
enum EmailSetting {
  ALL,
  CORE_ONLY,
}

function internal(config: IConfig) {
  return {
    name: config.name,
    marketingEmail: config.emailPreference ? …
Run Code Online (Sandbox Code Playgroud)

typescript zod

20
推荐指数
1
解决办法
4万
查看次数

如何从嵌套zod方案中省略某些值?

我有以下 zod 模式,在某些情况下,我想从模式中完全省略一个字段。我不能只是让它成为可选的。我怀疑有某种方法可以直接使用 zod 来实现。有没有办法省略字段或以某种方式预处理模式?

例如,我如何在没有此嵌套字段的情况下使用此架构。

const schema = z.object({
  name: z.number(),
  age: z.number(),
  data: z.array(
    z.object({
      id: z.string().optional(),
      name: z.string().nonempty().optional(),
    })
  )
});

const test = schema.shape.data //. ??? how can I omit the name field? 
type typeTest = z.infer<typeof test>; // just data without name field
Run Code Online (Sandbox Code Playgroud)

我如何省略这个嵌套值?

reactjs react-hook-form zod

10
推荐指数
1
解决办法
2万
查看次数

我可以使用 zod 验证精确值吗?

可以使用正则表达式来验证字符串。这很容易。

const myString = z.string().regex(/A string/);
Run Code Online (Sandbox Code Playgroud)

但其他数据类型呢?

我猜想以下内容可能适用于数字,但它似乎不惯用。

const myNumber = z.number().gte(7).lte(7);
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

zod

6
推荐指数
1
解决办法
8753
查看次数

代码分割不适用于反应中的包裹

我有这个组件,它来自包裹的文档。它说它应该默认工作。

import React from 'react';

const Router = () => {
 ...
  const ComponentToRender = React.lazy(() => import(`./Pages/${variableCompoentName}/index.js`));
  return (
    <React.Suspense fallback={<div>Loading...</div>}>
      <ComponentToRender />
    </React.Suspense>
  );
};

export default Router;

Run Code Online (Sandbox Code Playgroud)

但我在浏览器中收到错误消息:

Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec.

2src.7ed060e2.js:1362 Uncaught TypeError: Failed to fetch dynamically imported module: http://localhost:1234/Pages/Home/index.js
Run Code Online (Sandbox Code Playgroud)

有什么办法解决这个问题吗?我做错了什么?

这是我的 package.json

  "dependencies": {
    "@babel/core": "^7.12.3", …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs babeljs parceljs

5
推荐指数
1
解决办法
180
查看次数

如何为深层嵌套对象编写 zod 模式

我有以下数据:

{
  "2022-06-01": {
    "09:00am": {
      "time_table_id": 1,
      "job_id": 4,
      "start_working_time": "09:00am",
      "end_working_time": "09:00pm",
      "work_duration": "12:00:00",
      "merchant_name": "Brands Outlet @ The Starling",
      "address2": "Jalan SS 21/37, Damansara Utama",
      "job_name": "Pro hero",
      "job_application_status": "Hired"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我的模式,但它给了我一个 zod 错误。

const apiScheme = z.object({
  Date: z.object({
    Time: z.object({
      date: z.string(),
      time_table_id: z.number().nullable(),
      job_id: z.number(),
      start_working_time: z.string(),
      end_working_time: z.string(),
      // work_duration: z.string(),
      // merchant_name: z.string(),
      // address2: z.string(),
      job_name: z.string(),
      job_application_status: z.string(),
    }),
  }),
});

// -- snip -- (React code):

const …
Run Code Online (Sandbox Code Playgroud)

api android typescript react-native zod

4
推荐指数
1
解决办法
2万
查看次数