<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這篇文章將描述如何使用Zod 為您的專案設定型別驗證。Zod 是一個用於型別宣告和驗證的開源 TypeScript 庫。我們將研究為什麼使用 Zod 進行型別驗證,提供如何使用它的範例,並將其與其他庫進行比較。
型別驗證是驗證資料結構是否符合特定型別的過程。您可以使用它來確保輸入資料的有效性,以及記錄和執行程式碼的資料結構。
使用型別驗證有兩個主要好處:
雖然有許多 TypeScript 型別校驗庫,但個人認為 Zod 是比較好的之一。在為您的專案選擇庫時,除了其功能集外,您還應考慮其實現細節。
讓我們看看如何驗證字串。假設我們要驗證使用者輸入的密碼。我們希望密碼是一個非空字串,長度至少為 8 個字元,最多為 32 個字元:
import { z } from "zod"; const stringSchema = z.string().nonempty().min(8).max(32); stringSchema.parse(""); stringSchema.parse(""); // throws an exception stringSchema.parse("I am a valid password"); // returns "I am a valid password"
當你執行上面的程式碼時,你會看到 parse 方法丟擲了一個異常。異常將包含一個物件陣列,其中包含ZodError
錯誤的詳細描述:
[ { "code": "too_small", "minimum": 1, "type": "string", "inclusive": true, "message": "Should be at least 1 characters", "path": [] }, { "code": "too_small", "minimum": 8, "type": "string", "inclusive": true, "message": "Should be at least 8 characters", "path": [] } ]
當您嘗試解析有效字串時,parse
將簡單地返回其值。
現在讓我們繼續討論物件。Zod 對驗證巢狀物件結構具有強大的支援。
讓我們建立一個型別來驗證使用者物件。它將包含以下欄位:
要宣告型別,我們使用z.object
() 方法:
import { z } from "zod"; const User = z.object({ email: z.string().email(), name: z.string(), phoneNumber: z.number() });
讓我們嘗試根據我們剛剛建立的型別驗證範例物件:
const result = User.parse({ email: "hi@sample.com", name: "Hello World" });
該parse
方法將返回一個包含解析結果的物件。由於我們忘記在範例中提供該phoneNumber
欄位,Zod 將丟擲異常,幷包含以下錯誤陣列:
[ { "code": "invalid_type", "expected": "number", "received": "undefined", "inclusive": true, "message": "Required" "path": ["phoneNumber"] } ]
我們還可以從物件中推斷出型別。這是您可以免費獲取屬性的型別定義並在您的程式碼中使用它們的部分:
type UserType = z.infer<typeof User>;
Zod 讓您可以輕鬆地在彼此之上組合複雜的型別,就像您構建樂高積木一樣。
為了證明這一點,讓我們使用User
上面的型別物件並構建一個更詳細的具有愛好的使用者物件:
const User = z.object({ email: z.string().email(), name: z.string(), phoneNumber: z.number() }); const Hobby = z.object({ hobbyName: z.string().min(1) }); const Hobbyist = User.merge(Hobby); const result = Hobbyist.safeParse({ email: "hi@sample.com", name: "Hello World", phoneNumber: 123 });
通過組合我們的兩個型別物件,我們建立了一個新型別物件,您可以使用它來驗證使用者物件是否具有適當的愛好欄位。
在現有物件之上組合新物件是一種很好的方法,因為它可以幫助您保持資料結構中的所有更改同步。
在使用 Zod 進行驗證時,需要牢記幾件事。
如果不想讓Zod丟擲異常,當解析失敗時,可以改用該safeParse
方法。這將返回一個包含解析結果的物件:
mySchema.safeParse(""I am a valid password""); // => { success: true; data: "I am a valid password" } mySchema.safeParse(""); // => { success: false; error: ZodError }
預設情況下,Zod 在解析過程中會去除無法識別的key。這意味著任何未知的key都將被忽略。
如果您想通過無法識別的key而不丟失它們,您可以使用該.passthrough()
方法。
.array() 方法返回一個新的 ZodArray 範例,這意味著呼叫方法的順序很重要。通過切換鏈中呼叫的順序,您可以獲得完全不同的結果:
z.string().optional().array(); // (string | undefined)[] z.string().array().optional(); // string[] | undefined
其他廣泛使用的型別驗證庫也是不錯的選擇,例如 yup
和 io-ts
。
以下是您專案的選擇Zod 的一些原因:
在這篇文章中,我們介紹瞭如何使用 Zod 庫進行 TypeScript 型別驗證。我們研究瞭如何建立型別和使用型別來驗證資料結構。我們還看到了使用 Zod 時需要注意的一些事項以及它相對於其他庫的優勢。
有關 Zod 的更多資訊,可以檢視其 Github 頁面上的 優秀檔案 。
更多關於Zod TypeScript型別驗證的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45