是否可以使用可能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) 我有以下 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)
我如何省略这个嵌套值?
可以使用正则表达式来验证字符串。这很容易。
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)
有没有更好的办法?
我有这个组件,它来自包裹的文档。它说它应该默认工作。
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) 我有以下数据:
{
"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) zod ×4
reactjs ×2
typescript ×2
android ×1
api ×1
babeljs ×1
javascript ×1
parceljs ×1
react-native ×1