I dati che tornano da una richiesta di rete sono any — TypeScript si fida del tuo cast, ma il server potrebbe inviare qualcos'altro. $mol offre due piccole librerie di schemi a runtime che trasformano JSON non attendibile in un valore tipizzato e validato, e falliscono rumorosamente — con un percorso leggibile — quando la forma è sbagliata. Usale proprio dove i dati entrano nell'app, il più delle volte su una risposta fetch.
$mol_data — parser funzionali e concisi (in stile zod). Componi piccole funzioni di parsing e chiami il risultato su un valore.$mol_schema — schemi basati su classi con valori predefiniti. Estendi una classe record e ottieni .guard(), .cast(), .check() e un .default.Entrambi validano a runtime e inferiscono il tipo statico per te. Scegli $mol_data per DTO rapidi e (de)serializzazione; scegli $mol_schema quando vuoi classi di schema nominate e riutilizzabili con valori predefiniti e cast permissivo.
Descrivi la forma come un record di parser di campi:1const UserDTO=$mol_data_record({2name:$mol_data_string,3age:$mol_data_optional($mol_data_integer),4mail:$mol_data_email,5})Chiamalo sul valore grezzo. I dati validi passano, completamente tipizzati; i dati errati lanciano un $mol_data_error che nomina il percorso esatto che è fallito: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 /.+@.+/Riusa il tipo inferito ovunque con typeof UserDTO.Value:1function greet(user:typeofUserDTO.Value){2return `Hello, ${ user.name }`3}I mattoni di base includono $mol_data_string, $mol_data_number, $mol_data_integer, $mol_data_boolean, $mol_data_email, $mol_data_optional, $mol_data_nullable, $mol_data_variant (uno di più tipi), $mol_data_array, $mol_data_dict e $mol_data_record. $mol_data_pipe immette un valore parsato in una trasformazione — per esempio una stringa ISO in un $mol_time_moment — che funge anche da (de)serializzazione.
Definisci uno schema come classe che estende un record:1export class $my_userextends$mol_schema_record({2name:$mol_schema_string,3age:$mol_schema_natural,4}){}Hai quindi tre modi per applicarlo, più un valore predefinito già 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 }Gli schemi foglia includono $mol_schema_string, $mol_schema_integer, $mol_schema_natural, $mol_schema_float, $mol_schema_boolean, $mol_schema_enum([...]) e $mol_schema_pattern(/re/). Componili con $mol_schema_list(Item), $mol_schema_dict([Key,Val]), $mol_schema_maybe(S) (un valore, null o undefined), $mol_schema_some([...]) (un'unione) e $mol_schema_partial({...}). Espandi i campi di un altro record con ...Base.Fields:Modifica questa pagina su GitHubÈ stato utile?SìNoPrecedenteRecupero datiSuccessivoGiper BazaIn questa paginaDue librerie$mol_data$mol_schemaValidare una risposta fetchAvantiType to search the documentation.