рдЪреМрдХрдбрд╝реА 9: рдПрд▓реЗрдЧреНрд░реЛ | рд╕рд╛рджрдЧреА рдФрд░ рд╕рд░рд▓рддрд╛

рдЬрдм рдореИрдВрдиреЗ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдИ quartet, рддреЛ рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд▓реЛрдВ рдХреЛ рд▓рд┐рдпрд╛:



рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреИрд╕реЗ quartetрд╕рдордЭрддреА рд╣реИ рдХрд┐ рд╢рдмреНрдж "рд╢реЙрд░реНрдЯ" рдФрд░ "рд╕рд┐рдВрдкрд▓" рдХрд╛ рдЕрд░реНрде рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реИред


рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ quartet?


рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрдм рд╣реИ? рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕рддреНрдпрд╛рдкрди рдХреНрдпрд╛ рд╣реИ? рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдмрд╣реБрдзрд╛ рдкреНрд░рдХрд╛рд░ред
рдпрд╣ рдХреИрд╕реЗ quartetрдорджрдж рдХрд░рддрд╛ рд╣реИ ? рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╡рд┐рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдорд╛рдиреНрдпрддрд╛ рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рддрд╛ рд╣реИ - рдПрдХ рдпреЛрдЬрдирд╛ред рдХрдВрдкрд╛рдЗрд▓рд░ рдлрд╝рдВрдХреНрд╢рди vрд╕рд░реНрдХрд┐рдЯ рдХреЛ рдПрдХ рд╕рддреНрдпрд╛рдкрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рд╛рде рд╣реА v, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЛ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ ред


рдпрд╣ рдХрд╛рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ?


  1. рдЖрдк рдПрдХ рдпреЛрдЬрдирд╛ рд▓рд┐рдЦреЗрдВ
  2. рдЖрдк vрд╕рддреНрдпрд╛рдкрди рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рджреЗрддреЗ рд╣реИрдВ ред
  3. рд╕рддреНрдпрд╛рдкрди рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ!

рдЖрдЗрдП, рд╕рд╛рдд рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдмрд┐рдирд╛ рддрдирд╛рд╡ рджрд┐рдП рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд░реЗрдВред


.



:


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> тАУ   

, :


'string'v.string
'number'v.number
'boolean'v.boolean
'symbol'v.symbol

, :


const checkNumber = v(v.number);
//  , 
const checkNumber = (x) => typeof x === "number";

quartet


'function'v.function

:


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 //     8-      1   .

. 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 , .


, !


All Articles