Os dados que voltam de uma requisição de rede são any — o TypeScript confia no seu cast, mas o servidor pode enviar outra coisa. O $mol traz duas pequenas bibliotecas de esquema em tempo de execução que transformam JSON não confiável em um valor tipado e validado, e falham ruidosamente — com um caminho legível — quando o formato está errado. Use-as bem onde os dados entram no app, na maioria das vezes em uma resposta de fetch.
$mol_data — parsers funcionais e concisos (ao estilo zod). Você compõe pequenas funções de parsing e chama o resultado sobre um valor.$mol_schema — esquemas baseados em classes com valores padrão. Você estende uma classe de registro e obtém .guard(), .cast(), .check() e um .default.Ambas validam em tempo de execução e inferem o tipo estático para você. Recorra a $mol_data para DTOs rápidos e (des)serialização; recorra a $mol_schema quando quiser classes de esquema nomeadas e reutilizáveis com valores padrão e cast flexível.
Descreva o formato como um registro de parsers de campo:1const UserDTO=$mol_data_record({2name:$mol_data_string,3age:$mol_data_optional($mol_data_integer),4mail:$mol_data_email,5})Chame-o sobre o valor bruto. Dados válidos passam, totalmente tipados; dados inválidos lançam um $mol_data_error nomeando o caminho exato que falhou:1const user=UserDTO(json)2// user: { readonly name: string; readonly age?: number; readonly mail: string }34// If json.mail is "</script>", it throws:5// ["mail"] </script> is not a /.+@.+/Reutilize o tipo inferido em qualquer lugar com typeof UserDTO.Value:1function greet(user:typeofUserDTO.Value){2return `Hello, ${ user.name }`3}Os blocos de construção incluem $mol_data_string, $mol_data_number, $mol_data_integer, $mol_data_boolean, $mol_data_email, $mol_data_optional, $mol_data_nullable, $mol_data_variant (um de vários tipos), $mol_data_array, $mol_data_dict e $mol_data_record. $mol_data_pipe alimenta um valor parseado em uma transformação — por exemplo uma string ISO em um $mol_time_moment — o que também serve como (des)serialização.
Defina um esquema como uma classe que estende um registro:1export class $my_userextends$mol_schema_record({2name:$mol_schema_string,3age:$mol_schema_natural,4}){}Você então tem três formas de aplicá-lo, além de um valor padrão pronto:1const safe=$my_user.guard(input)// strict: throws on wrong data2const relaxed=$my_user.cast(input)// fills defaults instead of throwing3if ($my_user.check(input)){/* input is $my_user in here */}4const blank=$my_user.default// { name: '', age: 0 }Os esquemas folha incluem $mol_schema_string, $mol_schema_integer, $mol_schema_natural, $mol_schema_float, $mol_schema_boolean, $mol_schema_enum([...]) e $mol_schema_pattern(/re/). Componha-os com $mol_schema_list(Item), $mol_schema_dict([Key,Val]), $mol_schema_maybe(S) (um valor, null ou undefined), $mol_schema_some([...]) (uma união) e $mol_schema_partial({...}). Espalhe os campos de outro registro com ...Base.Fields:Editar esta página no GitHubIsto foi útil?SimNãoAnteriorBusca de dadosPróximoGiper BazaNesta páginaDuas bibliotecas$mol_data$mol_schemaValidar uma resposta de fetchPróximoType to search the documentation.