TypeScript의 강력한 형식의 Yup 스키마
4659 단어 typescriptyup
T extends U ? X : Y
의 기본 형식을 취하고 T
의 유형을 기반으로 새 유형을 만드는 데 사용됩니다. 이것을 사용하여 강력한 형식의 Yup 스키마를 만들 수 있는지 궁금했습니다.기본 아이디어는 Yup 스키마와 유형을 사용하는 일반 함수를 만드는 것입니다. 이 함수는 유형에 강력하게 유형이 지정된 Yup 스키마를 반환합니다. 이 함수는 조건부 유형을 사용하여 스키마 유형을 결정하고 적절한 스키마를 반환합니다.
import * as yup from "yup";
export type ConditionalSchema<T> = T extends string
? yup.StringSchema
: T extends number
? yup.NumberSchema
: T extends boolean
? yup.BooleanSchema
: T extends Record<any, any>
? yup.AnyObjectSchema
: T extends Array<any>
? yup.ArraySchema<any, any>
: yup.AnySchema;
export type Shape<Fields> = {
[Key in keyof Fields]: ConditionalSchema<Fields[Key]>;
};
이 두 가지 일반 유형을 사용하여 강력한 유형의 Yup 스키마를 생성할 수 있습니다. 이들은 더 많은 유형을 포함하고 배열과 객체를 더 잘 처리하도록 분명히 확장될 수 있습니다.
TypeScript 컴파일러를 행복하게 유지하는 몇 가지 사용 예:
interface Foo {
stringField: string;
booleanField: boolean;
}
yup.object<Shape<Foo>>({
stringField: yup.string().default(""),
booleanField: yup.boolean().default(false),
});
그리고 그것은 작동합니다! 🎉
Reference
이 문제에 관하여(TypeScript의 강력한 형식의 Yup 스키마), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jpoehnelt/strongly-typed-yup-schema-in-typescript-15bc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)