Quarteto 9: Allegro | Brevidade e simplicidade

Quando criei a biblioteca para validação de dados quartet, fiz os seguintes pontos de referência:



Neste artigo, mostrarei como a biblioteca quartetentende o que as palavras "Curto" e "Simples" significam no contexto da abordagem da validação.


Como isso funciona quartet?


Quando é necessário? É necessário quando a validação de dados é necessária.O
que é validação? Verifique os dados quanto à conformidade. Na maioria das vezes tipos.
Como quartetisso ajuda? Ele cria uma função de validação com base em uma descrição declarativa dos requisitos - um esquema. A função de compilador vconverte o circuito em uma função de validação. Além disso v, esquemas e métodos preparados são armazenados no interior para criar esquemas mais complexos. Veja a documentação para mais detalhes .


Como funciona?


  1. Você escreve um esquema
  2. Você o fornece à entrada da função de compilador vpara obter a função de validação.
  3. A função de validação está pronta para uso!

Vamos validar todos os dados do quarteto sem sobrecarregar o cérebro em sete abordagens.


.



:


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