Zod 모드로 값을 검증하는 Assiertion Function 정의
12189 단어 TypeScriptzodtech
zed가 뭐예요?
Zod is a TypeScript-first schema declaration and validation library.
https://www.npmjs.com/package/zod
"TypeScript 첫 번째 모드 정의, Validation 라이브러리."이 기사는 상세한 설명이 없으니 모르시는 분들은 조드에 대한 README와 조드에 대한 소개를 보셔도 됩니다.
Assiertion Function이란 무엇입니까?
TypeScript 3.7에 추가된 기능입니다.
사용자 정의 type guards와 비슷하지만 값을 확인한 후 유형에 맞지 않는다고 판단되면 boolean이 반환되지 않고 therow Error가 반환됩니다.
※ 엄밀히 말하면 이 설명은 잘못된 것 같습니다.결단이 type gurd 기능을 가지도록 하기 위해서인 것 같아요.
// ユーザー定義のtype guards
// 値の検証結果をbooleanで返す
function isString(value: unknown): value is string {
return typeof value === 'string';
}
// Assertion Functions
function assertString(value: unknown): asserts value is string {
if (typeof value !== 'string') {
throw new Error('…');
}
}
// Node.jsのassertモジュールも
// Assertion Functionsの恩恵を受けれるようになっていた気がする。
import assert from "assert";
const value: unknown = 'hoge';
assert(typeof value === 'string');
value; // string
자세한 내용은 이미 많은 사람들이 기사를 썼으니 읽어주세요.다음은 uhyo씨의 보도 등입니다. 상세하게 쓸 수 있을 것 같습니다.Type Script 3.7의 asserts x is T형은 어떻게 위험한가-Qita
Zod 모드로 값 검증
예:
asserts.ts
import { z, ZodType } from "zod";
export function assertZodSchema<T extends ZodType<any, any, any>>(
schema T,
value: unknown
): asserts value is z.infer<T> {
schema.parse(value);
}
아래와 같이 사용한다.import { z } from "zod";
import { assertZodType } from "./asserts";
const hogeSchema = z.string();
const value: unknown = 'hoge';
assertZodSchema(hogeSchema, value);
value; // string
그나저나 다른 언어의 결단은 끄기(ex:java, PHP 등), ECMAScript와 노드를 설정할 수 있는 경우가 많다고 생각합니다.js는 그런 기능이 없습니다.다음과 같이 스스로 실시하거나 unassert 제거 결단을 사용해야 한다.asserts.ts
export function assertZodSchema<T extends ZodType<any, any, any>>(
zodType T,
value: unknown
): asserts value is z.infer<T> {
if (process.env.NODE_ENV !== 'production') {
zodType.parse(value);
}
}
장점: "asserts의 위험성을 피할 수 있다"
상술한 uhyo의 글에서 asserts의 위험성에 대해 다음과 같이 기술한다.
방금 소개한 편리한 asserts형 술어지만 실제로는 함부로 사용하면 위험하다.위험은 무슨 뜻이냐면, 타입 스크립트가 어렵게 보장한 보안을 파괴했다는 것이다.
https://qiita.com/uhyo/items/b8d2ea6fbf6214fc4194
다음 예는 극단적이지만 사용자정의 Asserion Function이 유효성 검사 로직에 오류가 있으면 유형의 보안을 보장할 수 없습니다.
function assertString(value: unknown): asserts value is string {
// 何も…
// 検証していないのである!!!
}
const value: unknown = 1000000;
assertString(value);
value; // 実態はnumberだが、TSの静的解析上はstringになり、実行時のどこかで死ぬかも
assertZodSchema
는 Zod의 모델에 따라 검증 후 해결하는 유형을 결정하기 때문에 Zod에 오류가 없으면 검증 논리와 유형이 서로 어긋나지 않는다.끝맺다
실제 업무에서 Assertion Function은 Lambda의 프로세서 매개변수 유형과 설정 파일에서 읽은 데이터 유형 등을 검증하는 데 사용됩니다.type guard와 차별화해서 사용하지만, 개인적으로는 "type guard로 쓰면 검증 실패 시 처리를 써야 하는데 본격 촬영 때는 절대 거기에 들어가면 안 되고, 그리고 저는 as로 출연하기 싫은 사람~"이라고 말할 때 Assiertion Function을 선택할 수도 있다.
Reference
이 문제에 관하여(Zod 모드로 값을 검증하는 Assiertion Function 정의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/pirosikick/articles/829d0729317dde텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)