Dans cet article, nous allons examiner le type EnvOptions dans le code source de T3 Env. Au cas où vous vous demandez ce qu'est T3 Env ou EnvOptions,
T3 Env fournit une validation pour les variables d'environnement de type sécurisé à l'aide de zod. vous utilisez la fonction createEnv et fournissez une validation zod pour vos variables d'environnement serveur et client, comme indiqué dans l'exemple ci-dessous.
// src/env.mjs import { createEnv } from "@t3-oss/env-nextjs"; import { z } from "zod"; export const env = createEnv({ /* * Serverside Environment variables, not available on the client. * Will throw if you access these variables on the client. */ server: { DATABASE_URL: z.string().url(), OPEN_AI_API_KEY: z.string().min(1), }, /* * Environment variables available on the client (and server). * * ? You'll get type errors if these are not prefixed with NEXT_PUBLIC_. */ client: { NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: z.string().min(1), }, /* * Due to how Next.js bundles environment variables on Edge and Client, * we need to manually destructure them to make sure all are included in bundle. * * ? You'll get type errors if not all variables from `server` & `client` are included here. */ runtimeEnv: { DATABASE_URL: process.env.DATABASE_URL, OPEN_AI_API_KEY: process.env.OPEN_AI_API_KEY, NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY, }, });
Ce createEnv a le type ci-dessous défini dans le code source de T3 Env :
export function createEnv< TPrefix extends TPrefixFormat, TServer extends TServerFormat = NonNullable<unknown>, TClient extends TClientFormat = NonNullable<unknown>, TShared extends TSharedFormat = NonNullable<unknown>, const TExtends extends TExtendsFormat = [], >( opts: EnvOptions<TPrefix, TServer, TClient, TShared, TExtends>, ): CreateEnv<TServer, TClient, TShared, TExtends> { const runtimeEnv = opts.runtimeEnvStrict ?? opts.runtimeEnv ?? process.env;
Le paramètre de fonction ici est opts avec le type EnvOptions
export type EnvOptions< TPrefix extends string | undefined, TServer extends Record<string, ZodType>, TClient extends Record<string, ZodType>, TShared extends Record<string, ZodType>, TExtends extends Array<Record<string, unknown>>, > = | (LooseOptions<TShared, TExtends> & ServerClientOptions<TPrefix, TServer, TClient>) | (StrictOptions<TPrefix, TServer, TClient, TShared, TExtends> & ServerClientOptions<TPrefix, TServer, TClient>);
EnvOptions est un type générique. L'objet serveur dans les options transmises a le type générique — TServer étend Record
// server type is TServer that is a Record with key being string // and value being ZodType server: { DATABASE_URL: z.string().url(), OPEN_AI_API_KEY: z.string().min(1), }, // client type is TClient that is a Record with key being string // and value being ZodType client: { NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: z.string().min(1), },
J'ai à peine effleuré la surface ici, cela ressemble à un cas d'utilisation avancé de Typescript car ce type EnvOptions renvoie :
| (LooseOptions<TShared, TExtends> & ServerClientOptions<TPrefix, TServer, TClient>) | (StrictOptions<TPrefix, TServer, TClient, TShared, TExtends> & ServerClientOptions<TPrefix, TServer, TClient>);
Consultez les LooseOptions et ServerClientOptions dans le code source de t3-env.
Chez Thinkthroo, nous étudions les grands projets open source et fournissons des guides architecturaux. Nous avons développé des composants réutilisables, construits avec tailwind, que vous pouvez utiliser dans votre projet. Nous proposons des services de développement Next.js, React et Node.
Prenez rendez-vous avec nous pour discuter de votre projet.
1. https://github.com/t3-oss/t3-env/blob/main/packages/core/src/index.ts#L222
2. https://github.com/t3-oss/t3-env/blob/main/packages/core/src/index.ts#L183
3. https://env.t3.gg/
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!