Schema vs Type
μ€ν€λ§μ νμ λͺ¨λ λ°μ΄ν°μ ꡬ쑰 λ° ννλ₯Ό μ μνλλ° μ¬μ© λλ ν€μλμ΄λ€. μ΄ λ ν€μλ κ°μ λ¬΄μ¨ μ°¨μ΄κ° μλμ§ νλ² μ΄ν΄λ³΄μ.
Type
λ¨Όμ νμ μ μ μ μΈ λ°μ΄ν° κ²μ¬λ₯Ό μν΄ μ¬μ© λλ ν€μλμ΄λ€. μ¬κΈ°μ λ§νλ μ μ μΈ λ°μ΄ν°λ, μ»΄νμΌ νμμ μ μλ λ°μ΄ν°μ ꡬ쑰μ ννλ₯Ό μλ―Ένλ€. μ°λ¦¬κ° μ½λλ₯Ό μμ±νλ©° μ¬μ© λλ μ¬λ¬ λ³μ, ν¨μ λ±μ κ°μ²΄μ λ°μ΄ν° νμ μ λͺ μνμ¬ νμ μμ μ±μ λμΈλ€. λ°νμμ΄ μλ μ»΄νμΌ νμμ κ²μ¬λ₯Ό νκΈ° λλ¬Έμ κ°λ°μκ° λ―Έλ¦¬ νμ μλ¬λ₯Ό νμΈνκ³ μ‘μλΌμ μλ€.
type User = {
name: string;
age: number;
}
const sampleUser : User = {
name: 'aug',
age: 20
}
Schema
μ΄μ λ°ν΄ μ€ν€λ§λ λ°νμ λ°μ΄ν° κ²μ¦μ μν΄ μ¬μ© λλ ν€μλμ΄λ€. λ°νμ λ°μ΄ν° κ²μ¦μ΄λΌλ λ¨μ΄ μμ²΄κ° λ°λ‘ μλΏμ§ μμμ μλ€. μλ₯Ό λ€μ΄, κ΅¬κΈ κ²μμ°½μ μ λ ₯νλ λ°μ΄ν°λ€μ μ»΄νμΌ νμμ μ‘΄μ¬ νμ§ μλλ€. μ€μ λ‘ μ μ κ° μ λ ₯μ ν΄μΌ λ°μ΄ν°κ° μ λ¬λκΈ° λλ¬Έμ μ΄λ¬ν λ°μ΄ν° λ€μ λ°νμ λ°μ΄ν°λΌκ³ νλ€.
λ€μ λμμμ, μ€ν€λ§λ λ°νμ λ°μ΄ν°λ€μ΄ κ°λ°μκ° κΈ°λν ꡬ쑰/ννλ₯Ό κ°μ§κ³ μλμ§ νμΈνκΈ° μν΄ μ¬μ© λλ ν€μλμ΄λ€. μ£Όλ‘ API μλ΅κ°, νΌ μ λ ₯ λ±μ λ°μ΄ν° κ²μ¦μ μ¬μ©λλ€.
νμ μ€ν¬λ¦½νΈμμλ
zod
λΌλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ κ°λ ₯ν λ°μ΄ν° μ ν¨μ± κ²μ¦μ μ€μν μ μλ€.
import { z, ZodError } from "zod";
const pwdRegex: RegExp =
/^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,15}$/;
const passwordRegexSchema = z
.string()
.min(8, {
message: "λΉλ°λ²νΈλ μλ¬Έ/μ«μ/νΉμλ¬Έμλ₯Ό ν¬ν¨ν 8~15μ리 μ
λλ€.",
})
.max(15, {
message: "λΉλ°λ²νΈλ μλ¬Έ/μ«μ/νΉμλ¬Έμλ₯Ό ν¬ν¨ν 8~15μ리 μ
λλ€.",
})
.regex(pwdRegex, {
message: "νΉμλ¬Έμ μ€ ; & % = - + < > οΌΌ λ μ¬μ©ν μ μμ΅λλ€.",
});
type PasswordSchema = z.infer<typeof passwordRegexSchema>;
const verifyPassword = (password: PasswordSchema) => {
try {
const result = passwordRegexSchema.parse(password);
console.log(`Successfully verified password: ${result}`);
} catch (err) {
if (err instanceof ZodError) {
console.log(`Error Occurred: ${err.issues}`);
}
}
};
verifyPassword("password123!@");
Last updated