рдЬрдм рдореИрдВрдиреЗ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдИ quartet
, рддреЛ рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд▓реЛрдВ рдХреЛ рд▓рд┐рдпрд╛:
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреИрд╕реЗ quartet
рд╕рдордЭрддреА рд╣реИ рдХрд┐ рд╢рдмреНрдж "рд╢реЙрд░реНрдЯ" рдФрд░ "рд╕рд┐рдВрдкрд▓" рдХрд╛ рдЕрд░реНрде рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реИред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ quartet
?
рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрдм рд╣реИ? рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕рддреНрдпрд╛рдкрди рдХреНрдпрд╛ рд╣реИ? рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдмрд╣реБрдзрд╛ рдкреНрд░рдХрд╛рд░ред
рдпрд╣ рдХреИрд╕реЗ quartet
рдорджрдж рдХрд░рддрд╛ рд╣реИ ? рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╡рд┐рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдорд╛рдиреНрдпрддрд╛ рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рддрд╛ рд╣реИ - рдПрдХ рдпреЛрдЬрдирд╛ред рдХрдВрдкрд╛рдЗрд▓рд░ рдлрд╝рдВрдХреНрд╢рди v
рд╕рд░реНрдХрд┐рдЯ рдХреЛ рдПрдХ рд╕рддреНрдпрд╛рдкрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рд╛рде рд╣реА v
, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЛ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ ред
рдпрд╣ рдХрд╛рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ?
- рдЖрдк рдПрдХ рдпреЛрдЬрдирд╛ рд▓рд┐рдЦреЗрдВ
- рдЖрдк
v
рд╕рддреНрдпрд╛рдкрди рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рджреЗрддреЗ рд╣реИрдВ ред - рд╕рддреНрдпрд╛рдкрди рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ!
рдЖрдЗрдП, рд╕рд╛рдд рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдмрд┐рдирд╛ рддрдирд╛рд╡ рджрд┐рдП рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд░реЗрдВред
.
:
type Answer = 42;
quartet
:
const answerSchema = 42;
- :
import { v } from "quartet";
const checkAnswer = v(42);
. тАФ .
, . тАФ .
. , , .
const checkNumber = (x) => typeof x === "number";
const checkString = (x) => typeof x === "string";
const checkBoolean = (x) => typeof x === "boolean";
const checkSymbol = (x) => typeof x === "symbol";
:
const checkSomeType = x => typeof x === "<type>", <type> тАУ
, :
, :
const checkNumber = v(v.number);
const checkNumber = (x) => typeof x === "number";
quartet
:
const checkFunction = v(v.function);
const checkFunction = (x) => typeof x === "function";
. C тАФ v.
.
┬л┬╗
:
type NullableString = string | null;
quartet
:
const nullableStringSchema = [v.string, null];
:
const checkNullableString = v([v.string, null]);
:
type VariantSchema = Schema[];
. тАУ .
┬л┬╗
type Password = string
. v.minLength()
v.test(RegExp)
const stringSchema = v.string;
const min8Schema = v.minLength(8);
const atLeastOneDigitSchema = v.test(/\d/);
const atLeastOneLetterSchema = v.test(/[A-Za-z]/);
v.and()
:
const passwordSchema = v.and(
stringSchema,
min8Schema,
atLeastOneDigitSchema,
atLeastOneLetterSchema,
)
. v.and(, , ...)
.
Person
:
interface Person {
name: string
age: number
}
, Person
?
, name
age
. string
number
. !
, , .
тАФ !
:
const personSchema = {
name: v.string,
age: v.number,
};
:
interface ObjectInterfaceSchema {
[propertyName: string]: Schema;
}
. тАФ , тАФ , тАФ .
:
type Numbers = number[];
v.arrayOf()
. .
const checkNumbers = v(v.arrayOf(v.number));
. v.arrayOf( )
.
quartet
.
. ╤Ф v.custom( )
:
const evenSchema = v.custom((x) => x % 2 === 0)
const evenNumberSchema = v.and(
v.number,
evenSchema,
);
. v.custom( )
.
- тАФ .
- C тАФ
v.
. - тАФ .
v.and(, , ...)
.- тАФ , тАФ , тАФ .
v.arrayOf( )
.v.custom( )
.
P.S.
. quartet
:
. 4 , .
, !