Seguridad de Tipos
astro-i18n-next está escrito en TypeScript y proporciona declaraciones de tipos para el módulo virtual.
Declarando el módulo virtual
Agrega la declaración del módulo virtual:i18n a src/env.d.ts:
/// <reference types="astro/client" />
declare module 'virtual:i18n' { export const t: (locale: string, key: string) => string; export const localePath: (locale: string, path: string) => string; export const switchLocalePath: (currentPath: string, targetLocale: string) => string; export const getLocaleFromPath: (pathname: string) => string; export const localized: <T>(field: Record<string, T>, locale: string) => T; export const getLocalizedSlug: (category: string, canonicalSlug: string, locale: string) => string; export const getCanonicalSlug: (category: string, localizedSlug: string, locale: string) => string | undefined; export const config: import('@otrodigital/astro-i18n-next').LocaleConfig; export const defaultLocale: string; export const locales: string[]; export const localeLabels: Record<string, string>; export const localeHtmlLang: Record<string, string>;}Esto te da autocompletado completo y verificación de tipos para todas las importaciones de virtual:i18n.
Tipando Astro.locals
Para tipar la propiedad locale establecida por el middleware:
declare namespace App { interface Locals { locale: string; }}Schemas de contenido con Zod
Al usar el cargador de contenido multilingüe, define schemas Zod que coincidan con la estructura de campos localizados:
import { z } from 'astro:content';
// Un campo con inglés requerido y español opcionalconst localizedString = z.object({ en: z.string(), es: z.string().optional(),});
// Un campo con inglés requerido y otros idiomas opcionalesconst localizedField = <T extends z.ZodType>(schema: T) => z.object({ en: schema, es: schema.optional(), });
const saunaSchema = z.object({ name: localizedString, slugs: localizedString, image: z.string(), description: localizedString, published: z.coerce.date(), bodyHtml: z.record(z.string()).optional(),});Importando tipos
Todas las interfaces TypeScript se exportan desde el paquete:
import type { LocaleConfig, I18nConfig, I18nInstance, SlugMap, PageEntry, I18nextOptions,} from '@otrodigital/astro-i18n-next';Consulta la referencia de Tipos para las definiciones completas de las interfaces.