рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕
рдореИрдВ рдЕрдм рдПрдХ рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рдлреНрд░рдВрдЯ-рдПрдВрдб рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ "рджреБрд╢реНрдорди" рдмреИрдХрдПрдВрдб рдерд╛ред рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдЪрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдХреЛрдИ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛ред
рд╣рдордиреЗ рдХреЛрдб рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рдЬреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рдерд╛ рдХрд┐ рдмреИрдХрдПрдВрдб рд╣рдореЗрдВ рдХреБрдЫ рдбреЗрдЯрд╛, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рд╛рд░реВрдк рднреЗрдЬрддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдмреИрдХрдПрдВрдб рдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирд╛ - рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪреЗрддрд╛рд╡рдиреА рдХреЗред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдШрдВрдЯреЛрдВ рд▓рдЧ рдЧрдП рдХрд┐ рд╕рд╛рдЗрдЯ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╣рд┐рд╕реНрд╕реЗ рдиреЗ рдХрд╛рдо рдХрд░рдирд╛ рдХреНрдпреЛрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред
рд╣рдордиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЬреЛ рдбреЗрдЯрд╛ рд╣рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмреИрдХрдПрдВрдб рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИред рд╣рдордиреЗ рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рд╕реЗ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рдпрд╛ред
рдпрд╣ рдЕрдзреНрдпрдпрди рдореБрдЭреЗ рдХрдореАрд╢рди рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдореИрдВрдиреЗ рдЙрд╕ рдЙрдкрдХрд░рдг рдХреА рд╕реВрдЪреА рдмрдирд╛рдИ рд╣реИ рдЬреЛ рдореИрдВ рдЙрд╕ рдЙрдкрдХрд░рдг рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪрдпрди рдмрд┐рдВрджреБ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБ рдереЗ:
- рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╡рд┐рд╡рд░рдг (рдпреЛрдЬрдирд╛), рдЬреЛ рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА / рдЧрд▓рдд (рд╡реИрдз, рд╡реИрдз рдирд╣реАрдВ) рд▓реМрдЯрд╛рддрд╛ рд╣реИ
- рдХрдо рдкреНрд░рд╡реЗрд╢ рджрд╣рд▓реАрдЬ;
- рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╡реИрдз рдбреЗрдЯрд╛ рдХреА рд╕рдорд╛рдирддрд╛;
- рдХрд╕реНрдЯрдо рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЗ рдПрдХреАрдХрд░рдг рдореЗрдВ рдЖрд╕рд╛рдиреА;
- рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдПрдХреАрдХрд░рдг рдореЗрдВ рдЖрд╕рд╛рдиреАред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореБрдЭреЗ рдХрдИ рд╕рддреНрдпрд╛рдкрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдорд┐рд▓реАрдВ, рдЬрд┐рдирдореЗрдВ TOP-5 (ajv, joi, roi ...) рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЧрдИред рд╡реЗ рд╕рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдкреНрд░рддреАрдд рд╣реБрдЖ рдХрд┐ 5% рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдЙрдиреНрд╣реЛрдВрдиреЗ 95% рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЛ рдмрд▓реНрдХрд┐ рдХреНрд░рд┐рдпрд╛ рдФрд░ рднрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд░реНрдмрд╛рдж рдХрд┐рдпрд╛ред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛: рдХреНрдпреЛрдВ рди рдЦреБрдж рдХреБрдЫ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдореЗрд░реЗ рдЕрдиреБрдХреВрд▓ рд╣реЛред
рдЪрд╛рд░ рдорд╣реАрдиреЗ рдмрд╛рдж, рдореЗрд░реА рдЪреМрдХрдбрд╝реА рдорд╛рдиреНрдпрддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕рд╛рддрд╡рд╛рдВ рд╕рдВрд╕реНрдХрд░рдг рд╕рд╛рдордиреЗ рдЖрдпрд╛ред
рдпрд╣ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдерд╛, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛, nk рдкрд░ 11k рдбрд╛рдЙрдирд▓реЛрдбред рд╣рдордиреЗ рддреАрди рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрднрд┐рдпрд╛рди рдореЗрдВ рддреАрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред
рдЗрди рддреАрди рдорд╣реАрдиреЛрдВ рдиреЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдИ рд╣реИред рдЪреМрдХрдбрд╝реА рдиреЗ рдЕрдкрдиреЗ рд╕рднреА рдлрд╛рдпрджреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рд╣реИрдВред рдмреИрдХрдПрдВрдб рд╕реЗ рдХреЛрдИ рдбреЗрдЯрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВред рд╣рд░ рдмрд╛рд░ рдЬрдм рдЙрдиреНрд╣реЛрдВрдиреЗ рдЬрд╡рд╛рдм рдмрджрд▓рд╛, рд╣рдордиреЗ рддреБрд░рдВрдд рдПрдХ рдЧрд▓рддреА рдХреАред рдмрдЧ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рдбреЗрдЯрд╛ рдмрдЧ рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЦрд╛рдорд┐рдпреЛрдВ рдХреА рднреА рдкрд╣рдЪрд╛рди рдХреА рдЧрдИред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдХрд┐рдП рдЧрдП рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рдореИрдВ рдЗрди рд╡рд╛рд╕реНрддреБ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред
рд╡рд╛рд╕реНрддреБ рд░реЗрдХ
"рд╕реНрдЯреНрд░реЛрдХреЛ" - рдпреЛрдЬрдирд╛ рдХреА рдПрдХ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛
рдореИрдВ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред
const personSchema = { name: 'string', age: 'number', linkedin: ['string', 'null'] }
рдпрд╣ рдпреЛрдЬрдирд╛ рддреАрди рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдорд╛рдиреНрдп рдХрд░рддреА рд╣реИ: рдирд╛рдо - рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЙрдореНрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП - рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓рд┐рдВрдХреНрдбрдЗрди рдореЗрдВ рдПрдХ рдЦрд╛рддреЗ рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдпрд╛ рддреЛ рд╢реВрдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрджрд┐ рдХреЛрдИ рдЦрд╛рддрд╛ рдирд╣реАрдВ рд╣реИ) рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдпрджрд┐ рдХреЛрдИ рдЦрд╛рддрд╛ рд╣реИ)ред
рдпрд╣ рдпреЛрдЬрдирд╛ рдкрдардиреАрдпрддрд╛, рдорд╛рдиреНрдп рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдХреА рд╕реАрдорд╛ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрд░рд╣ рдХреА рдпреЛрдЬрдирд╛ рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
type Person = { name: string age: number linkedin: string | null }
(рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдкрд░рд┐рд╡рд░реНрддрди рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЙрд╕реНрдореЗрдЯрд┐рдХ рд╣реИрдВ)
рдЬрдм рдореИрдВрдиреЗ рдПрдХ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП)ред рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ - рддрд╛рд░, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛, рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдирд╛рдоред
рд▓реЗрдХрд┐рди рддрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рд╕рдВрдХрд▓рдХ рдпрд╛ рддреНрд░реБрдЯрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдЙрдирдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ 'рд╕рдВрдЦреНрдпрд╛' 'рд╕рдВрдЦреНрдпрд╛' рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред
рдирд┐рд░реНрдгрдп
рдЪреМрдХрдбрд╝реА рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг 8.0.0ред рдореИрдВрдиреЗ рдЪреМрдХрдбрд╝реА рд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрджрд░ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧред
рдЖрд░реЗрдЦ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
const personSchema = { name: v.string age: v.number, linkedin: [v.string, null] }
рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреЗ рджреЛ рдмрдбрд╝реЗ рдлрд╛рдпрджреЗ рд╣реИрдВ:
- рд╕рдВрдХрд▓рдХ рдпрд╛ рддреНрд░реБрдЯрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ - рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдХрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╣реИред
- рд▓рд╛рдЗрдиреЗрдВ - рдЕрдм рд╕реНрдХреАрдорд╛ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдгрди рдиреАрдЪреЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрд╣рд▓реЗ рд╕рд╛рдд рд╕рдВрд╕реНрдХрд░рдг рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЗрд╕рд▓рд┐рдП, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдШреЛрд╖рдгрд╛рдПрдБ рд▓рд┐рдЦреА рдЧрдИрдВред
рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдорд╛рдЗрдирд╕ рдерд╛ - рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп, рд╣рдореЗрд╢рд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рдирд╛ рдЖрд╕рд╛рди рдерд╛ред
рдЗрд╕ рддрд░рд╣ рдХреА рдЫреЛрдЯреА-рдореЛрдЯреА рдЕрд╕реБрд╡рд┐рдзрд╛рдПрдБ рднреА рдереАрдВ:
const checkPerson = v(personSchema)
рдЬрдм рд╣рдордиреЗ рд▓рд╛рдЗрди (0) рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡реИрд▓рд┐рдбреЗрдЯрд░ рдмрдирд╛рдпрд╛ред рд╣рдо рд▓рд╛рдЗрди (1) рдкрд░ рдмреИрдХрдПрдВрдб рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрддреНрддрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЪрд╛рд╣реЗрдВрдЧреЗред рдСрди рд▓рд╛рдЗрди (2) рддрд╛рдХрд┐ person
рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реНрдпрдХреНрддрд┐ рд╣реЛред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реБрдЖ рдирд╣реАрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕рд╛ рдЪреЗрдХ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЧрд╛рд░реНрдб рдирд╣реАрдВ рдерд╛ред
рдирд┐рд░реНрдгрдп
рдореИрдВрдиреЗ рдкреВрд░реА рдЪрддреБрд░реНрдерд╛рдВрд╢ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧреЗ рд░рд╣реЗред рд░рд╛рд╕реНрддреЗ рдХреЗ рд╕рд╛рде, рд╣рдо рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрдХрд▓рд┐рдд рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЧрд╛рд░реНрдб рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
const checkPerson = v<Person>(personSchema)
рдЕрдм рдСрди рд▓рд╛рдЗрди (2) person
рдЯрд╛рдЗрдк Person
ред
рдкрдардиреАрдпрддрд╛
рдРрд╕реЗ рджреЛ рдорд╛рдорд▓реЗ рднреА рдереЗ рдЬрд╣рд╛рдВ рдХреЛрдб рдХреЛ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рд╛ рдЧрдпрд╛ рдерд╛: рдореВрд▓реНрдпреЛрдВ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ (рдПрдирдо рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛) рдФрд░ рд╡рд╕реНрддреБ рдХреЗ рдЕрдиреНрдп рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ред
a) рдПрдирд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
рд╢реБрд░реВ рдореЗрдВ, рдПрдХ рд╡рд┐рдЪрд╛рд░ рдерд╛, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ред рд╣рдо рдЕрдкрдиреА рд╡рд╕реНрддреБ рдореЗрдВ рдлрд╝реАрд▓реНрдб "рд▓рд┐рдВрдЧ" рдЬреЛрдбрд╝рдХрд░ рдЗрд╕рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВрдЧреЗред
рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рдерд╛:
const personSchema = { name: 'string', age: 'number', linkedin: ['null', 'string'], sex: v.enum('male', 'female') }
рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рдкрдардиреАрдп рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╕рдм рдХреБрдЫ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдпреЛрдЬрдирд╛ рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдШреЛрд╖рд┐рдд рдПрдирдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж:
enum Sex { Male = 'male', Female = 'female' }
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдореИрдВ рдЗрд╕реЗ рд╕рд░реНрдХрд┐рдЯ рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рддрд╛рдХрд┐ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 'рдкреБрд░реБрд╖' -> 'рдПрдо', 'рдорд╣рд┐рд▓рд╛' -> 'рдПрдл'), рд╕рддреНрдпрд╛рдкрди рдпреЛрдЬрдирд╛ рднреА рдмрджрд▓ рдЬрд╛рдПред
рдЗрд╕рд▓рд┐рдП, рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ enum рд╕рддреНрдпрд╛рдкрди рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛:
const personSchema = { name: 'string', age: 'number', linkedin: ['null', 'string'], sex: v.enum(...Object.values(Sex)) }
рдЬреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рдХрд╛рдлреА рднрджреНрджрд╛ рд▓рдЧрддрд╛ рд╣реИред
b) рд╡рд╕реНрддреБ рдХреЗ рдЕрд╡рд╢рд┐рд╖реНрдЯ рдЧреБрдгреЛрдВ рдХрд╛ рд╕рддреНрдпрд╛рдкрди
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдЕрдкрдиреА рд╡рд╕реНрддреБ рдореЗрдВ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖реЗрддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдХреЛ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдпрд╛ рддреЛ null
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧред
рдкреБрд░рд╛рдиреА рдпреЛрдЬрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧреА:
const personSchema = { name: 'string', age: 'number', linkedin: ['null', 'string'], sex: v.enum(...Object.values(Sex)), ...v.rest(['null', 'string'])
рдЗрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдиреЗ рд╢реЗрд╖ рдЧреБрдгреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ - рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
рдирд┐рд░реНрдгрдп
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рддрд╛рд░ рдЕрдм рд╕рддреНрдпрд╛рдкрди рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВред рдХреЗрд╡рд▓ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реИрд▓реНрдпреВрдЬрд╝ рд╣реА рд╡реИрд▓рд┐рдбреЗрд╢рди рд╕реНрдХреАрдо рдереЗред рдСрдмреНрдЬреЗрдХреНрдЯ - рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рддреНрдпрд╛рдкрди рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА - рд╡реИрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдкред рдЕрдиреНрдп рд╕рднреА рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдлрдВрдХреНрд╢рди (рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬрдирд░реЗрдЯ рдпрд╛ рдХрд╕реНрдЯрдо) -ред
рдЗрд╕ рдкреНрд░рд╛рд╡рдзрд╛рди рдиреЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдЬрд┐рд╕рдиреЗ рдХрдИ рдмрд╛рд░ рд╕рд░реНрдХрд┐рдЯ рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдЧрд░ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ 'рдкреБрд░реБрд╖' рдХреЗ рд╕рд╛рде рдореВрд▓реНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореВрд▓реНрдп рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ 'рдкреБрд░реБрд╖' рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╕рд░реНрдХрд┐рдЯ рдХреЗ рдПрдХ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдЬрд╣рд╛рдВ рдЖрдк рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдЖрджрд┐рдо рдореВрд▓реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдиреНрдп рдореВрд▓реНрдп рд╣реИ рдЬреЛ рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдирд╛рдП рдЧрдП рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдмреЗрд╣рддрд░ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ:
рдЕрдЧрд░ рд╣рдореЗрдВ рд╕рдорд╛рдирддрд╛-рдорди рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
const check42 = v(42) check42(42)
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╡реНрдпрдХреНрддрд┐ рд╕реНрдХреАрдорд╛ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдгреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ рдмрд┐рдирд╛):
const personSchema = { name: v.string, age: v.number, linkedin: [null, v.string],
рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд enums рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
const personSchema = { name: v.string, age: v.number, linkedin: [null, v.string], sex: Object.values(Sex)
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐ рдХреЛ рдПрдирдо рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╕рд╛рд░ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдорд╛рдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХреНрдпрд╛ рдПрдХ рдЖрджрд┐рдо рдореВрд▓реНрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕рдВрдЦреНрдпрд╛, рддрд╛рд░, рд╡рд░реНрдг, true
, false
, null
рдФрд░ undefined
ред
рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдореЗрдВ рдЙрдирдХреЗ рд╕рд╛рде рдореВрд▓реНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХреЗрд╡рд▓ рдЗрди рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдПрдХ рдорд╛рдиреНрдпрддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп - рдпрд╣ рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдмрдирд╛рдПрдЧрд╛ рдЬреЛ рдпреЛрдЬрдирд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдореВрд▓реНрдп рдХреА рд╕рдЦреНрддреА рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред
рдЕрд╡рд╢рд┐рд╖реНрдЯ рдЧреБрдгреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдиреНрдп рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛:
const personSchema = { name: v.string, age: v.number, linkedin: [null, v.string], sex: Object.values(Sex), [v.rest]: [null, v.string] }
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд░реНрдХрд┐рдЯ рдЕрдзрд┐рдХ рдкрдардиреАрдп рджрд┐рдЦрддрд╛ рд╣реИред рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреА рддрд░рд╣ред
рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рд╣реИ
рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рддреНрд░реБрдЯрд┐ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рдереЗред рдЙрдиреНрд╣реЗрдВ v
рдлрдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЕрд░реИ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╕рддреНрдпрд╛рдкрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдФрд░ v (рдЕрдорд╛рдиреНрдпрддрд╛ рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдпрд╣ рд╕рдм рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
a) рд╣рдо рдЖрд░реЗрдЦ рдореЗрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
const checkPerson = v({ name: v('string', 'wrong name') age: v('number', 'wrong age'), linkedin: v(['null', 'string'], 'wrong linkedin'), sex: v( v.enum(...Object.values(Sex)), 'wrong sex value' ), ...v.rest( v( ['null', 'string'], 'wrong social networks link' ) )
рд╕рд░реНрдХрд┐рдЯ рдХреЗ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреЗ рд▓рд┐рдП - рдЖрдк v рд╕рдВрдХрд▓рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдмреА) рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╕рд░рдгреА рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ
рд╕рддреНрдпрд╛рдкрди рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рд░рдгреА рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреМрд░рд╛рди рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдереЗред
v.clearContext()
c) рдорд╛рдиреНрдп рдХрд░реЗрдВ
const isPersonValid = checkPerson(person)
рдЗрд╕ рдЬрд╛рдБрдЪ рдХреЗ рджреМрд░рд╛рди, рдпрджрд┐ рдПрдХ рд╡реИрдзрддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рд░реНрдХрд┐рдЯ рдмрдирд╛рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ - рдЗрд╕реЗ рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЛ v.explanation
Global array рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдШ) рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ
if (!isPersonValid) { throw new TypeError('Invalid person response: ' + v.explanation.join('; ')) }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╣рдо рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рдЗрд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рднреАред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕рдореЗрдВ рд╣реИ рдХрд┐ рд╕рд░рдгреА рд╕реНрдерд┐рдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
рдирд┐рд░реНрдгрдп
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╕рддреНрдпрд╛рдкрди рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЧрдпрд╛ред рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХреНрдпрд╛ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдкреНрд░рдХрд╛рд░ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ = (рдореВрд▓реНрдп: рдХреЛрдИ рднреА, рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг ?: рдХреЛрдИ []) => рдмреВрд▓рд┐рдпрди
рдЕрдм рдпрджрд┐ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрд╕ рд╕рд░рдгреА рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдЗрдХрд╛рдИ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдРрд╕рд╛ рддрд░реАрдХрд╛ рднреА рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╡реИрд▓реНрдпреВ рдХреЗ рд╡реИрд▓реНрдпреВ рд╡реИрд▓рд┐рдб рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдлрдВрдХреНрд╢рди рдХреЛ рд╡реИрд▓реНрдпреВрдПрд╢рди рдлрдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╡реИрд▓реНрдпреВ рд╡реИрд▓рд┐рдб рди рд╣реЛрдиреЗ рдкрд░ рдПрдХреНрд╕рдкреНрд▓реЗрдиреЗрд╢рди рдХрд╛ рд╡реНрдпреВ рджреЗрддрд╛ рд╣реИред
рдЕрдм рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рддреНрдпрд╛рдкрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
const checkPerson = v<Person>({ name: v(v.string, 'wrong name'), age: v(v.number, 'wrong age'), linkedin: v([null, v.string], 'wrong linkedin') sex: v(Object.values(Sex), 'wrong sex') [v.rest]: v([null, v.string], 'wrong social network') })
рдЕрдВрддрднрд╛рд╖рдг
рдореИрдВрдиреЗ рддреАрди рдкрд░рд┐рд╕рд░реЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЬрд┐рд╕рдХреА рд╡рдЬрд╣ рд╕реЗ рдореБрдЭреЗ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛:
- рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЛрдЧ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп рдЧрд▓рдд рдирд╣реАрдВ рд╣реИрдВ
- рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, v.explanation array)
- рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг - рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдбрд╝реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рдерд╛ред
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛, рдФрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реИред
рдЖрдк рд╕рднреА рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред