Saltar al contenido principal
Móvil Capacitor

Tipo de script ejemplo de API para Capacitor y Capgo

Explora un ejemplo práctico de TypeScript API para plugins Capacitor y actualizaciones Capgo. Domina interfaces tipadas, patrones de escucha y estrategias de implementación.

TipoScript Ejemplo API para Capacitor y Capgo

Cada sólido Ejemplo de TipoScript API Para Capacitor cada ejemplo comienza de la misma manera: con una interfaz de plugin tipada. Especifica explícitamente tus métodos, opciones y resultados de Promesa, y tu web code y la capa nativa comparten un contrato que TypeScript realmente aplica.

Índice de Contenido

Crear una Interface de Plugin Capacitor Tipificada Fuertemente

La interfaz describe la API que tu web code ve. La implementación nativa detrás de ella tiene que cumplir con ese contrato — y TypeScript verifica los nombres de métodos, parámetros y valores de retorno antes de que tu aplicación se ejecute.

import { registerPlugin } from ‘@capacitor/core’;

export interface EstadoDelDispositivo { online: boolean; batteryLevel?: number; }

export interface PluginDelDispositivo { getStatus(): Promise}setLabel(options: { etiqueta: string }): Promise<{ guardado: boolean }>;

export const Dispositivo = registerPlugin(‘Dispositivo’);

Hay mucho que ver en esas pocas líneas:

  • Tipos de retorno explícitos mantienen cada resultado predecible.
  • Objetos de opciones tipados capturan propiedades faltantes o mal escritas en tiempo de compilación.
  • Metodos basados en promesas El trabajo nativo se realiza de forma asíncrona.
  • Un tipo genérico registerPlugin Una llamada Es lo que conecta el puente web API con el puente nativo.
  • Interfaces Documentan el contrato sin agregar un solo byte de ejecución code.

Cada sitio de llamada recibe el mismo tratamiento:

const estado = await Device.getStatus(); console.log(estado.conectado);

await Device.setLabel({ label: ‘Producción’ });

Intercambiar { label: 'Production' } por { name: 'Production' } y el compilador lo marca en el acto. Eso supera descubrir la incompatibilidad después de una publicación móvil.

La interfaz es también donde modelas valores opcionales y casos de falla. Si un método nativo no puede producir siempre una lectura de la batería batteryLevel?: number le dice a cada llamador que maneje undefined.

La siguiente imagen muestra cómo los métodos tipados, opciones, valores de retorno, definiciones de puentes y comprobaciones de tiempo de compilación se conectan dentro de un Capacitor API.

Un diagrama que ilustra los beneficios clave de una interfaz de plugin de TypeScript fuertemente tipada para frameworks de desarrollo móvil.

La idea central: Las definiciones de tipo fluyen desde la interfaz web hacia la lógica de plataforma nativay las comprobaciones de tiempo de compilación vigilan cada sitio de llamada.

Consulta rápida para API Diseño

Elemento Propósito Example
Firma de método Define el comportamiento llamable getStatus()
Tipo de opciones Controla la forma de entrada { label: string }
Resultado de la promesa Representa el trabajo asíncrono Promise<DeviceStatus>
Interface de resultado Define los datos devueltos online: boolean

Para una referencia más profunda, lee la guía creando APIs en TypeScriptDejar secretos y credenciales de firma fuera del cliente code, y probar la interfaz contra cada implementación de plataforma antes de publicar.

Mobile teams juggle JavaScript, native code, device permissions, and asynchronous platform services all at once. A fuerte contrato de TypeScript funciona como una lista compartida de tareas en cada una de esas fronteras, haciendo explícitas las expectativas antes de que cualquier code llegue a un dispositivo iOS o Android.

Una persona codificando en una laptop que muestra code en una mesa al lado de una taza de café.

Para un ejemplo concreto TypeScript API examplecompare un método que devuelve Promise<DeviceStatus> with one hands back untyped data. The typed version tells your editor and every reviewer exactly which fields exist. The untyped version pushes that discovery work onto runtime logs, manual testing, and, worst case, production incidents.

Señales de Adopción

TypeScript ha superado ampliamente su nicho inicial en el front-end. Su adopción ha ascendido a 35% de los desarrolladores en 202412% en 2017 12% en 2017, and more than un millón de GitHub contribuyentes listado como su idioma principal para 2025. Explora el contenido completo si deseas los números brutos. si quieres los números brutos.

That trajectory matters for mobile organizations in practical ways. Hiring, onboarding, and code review increasingly revolve around shared types. Someone joining a Capacitor project can read an interface and understand the expected native behavior without tracing through every implementation.

Typed APIs also make release work easier to reason about. When a method demands a specific options object, a renamed property or a missing field fails at compile time instead of silently producing a half-formed native request.

Strong typing shifts critical feedback leftCuando una corrección tarda minutos en lugar de una liberación de parche de emergencia.

Ventajas para equipos de Capacitor

Cross-platform apps typically expose one web-facing API that sits on top of several native implementations. TypeScript cannot prove every native detail behaves identically, but it can keep your calls consistent across the entire application.

Aplica tipos explícitos a: __CAPGO_KEEP_0__

  • Entradas de métodoIncluyendo opciones requeridas y opcionales
  • Resultados de promesaDe manera que los datos de éxito siempre tienen una forma predecible
  • Eventos y oyentes, so callbacks handle known payloads
  • Errores y valores de estadoDe manera que las rutas de fallback siguen visibles

Esta estructura se paga cuando se integran plugins de dispositivo o servicios operativos. También ayuda a los equipos que revisan la automatización de actualizaciones, donde un canal incorrecto, un identificador de paquete o un campo de compatibilidad pueden propagarse a una gran base de usuarios.

Para una inmersión más profunda en patrones relacionados, lee nuestra guía para generar APIs tipadas con OpenAPI. Cubre cómo las definiciones compartidas reducen la deriva manual que normalmente se filtra entre la documentación de API y la aplicación code.

Hacer el Caso Empresarial

El tipado estricto requiere una inversión inicial, especialmente cuando el JavaScript más antiguo code contiene formas de datos inconsistentes. El retorno se muestra con el tiempo: refactores más pequeños, propiedad más clara y muchas menos sorpresas de integración.

Inicie con los límites que llevan más riesgo:

  1. Defina interfaces de respuesta para llamadas nativas y remotas.
  2. Tipifique objetos de opciones y payloads de eventos.
  3. Turn on strict compiler checks incrementally.
  4. Require type checks before publishing any update.

Para equipos móviles de empresas, esa base mantiene la mantenibilidad predecible a través de plataformas, lanzamientos y contribuyentes.

Capacitor’s ScreenOrientationPlugin es una gran herramienta TypeScript API example because it maps a handful of simple web methods onto platform-specific device behavior. The public contract stays identical across platforms, while iOS and Android each deal with their own native details underneath.

import { registerPlugin } from ‘@capacitor/core’;

export type OrientaciónTipo = | ‘portrait-primary’ | ‘portrait-secondary’ | ‘landscape-primary’ | ‘landscape-secondary’;

export interface OrientaciónDatos { tipo: OrientaciónTipo; ángulo: número; }

export interface OpcionesBloqueo { orientación: OrientaciónTipo; }

export interface PluginOrientaciónPantalla { orientación(): Promesa}; bloquear(opciones: OpcionesBloqueo): Promesa}; desbloquear(): Promesa}; agregarEscuchador( evento: ‘cambioDeOrientaciónDePantalla’, listenerFunc: (datos: OrientaciónDatos) =&gt; void, ): Promesa&lt;{ remove: () =&gt; Promesa}&gt;; } }&gt;; }

export const OrientaciónDePantalla = registerPlugin(‘ScreenOrientation’);

— lee la orientación actual de manera asíncrona

  • orientation() — lee la orientación actual de manera asíncrona
  • lock() acepta solo un valor de orientación conocido
  • unlock() devuelve el control a la comportamiento normal del dispositivo
  • addListener() dispara un paquete de tipo cada vez que cambia la orientación

Desde que cada método devuelve una Promesa, puedes usar el mismo patrón de llamada contra la puente nativa y contra una implementación de navegador. Sin ramificación, sin casos especiales.

const current = await ScreenOrientation.orientation();

si (current.type comienza con ('landscape')) { console.log(Angle: ${current.angle}); }

await ScreenOrientation.lock({ orientation: 'landscape-primary', });

Typeea un valor mal escrito como landscape-main and the build fails on the spot. That’s a compile error you fix in seconds — not a platform-specific runtime bug you chase through device logs.

Tipo de Escucha Argumentos Correctamente

Los oyentes merecen el mismo rigor que los métodos regulares. Evite any aquí, porque oculta la diferencia entre un payload de evento y el resultado orientation() devuelve.

const handleChange = (data: OrientaciónDePantalla) =&gt; { document.body.dataset.orientation = data.type; };

const suscripción = await ScreenOrientation.addListener( ‘cambioDeOrientaciónDePantalla’, handleChange, );

await suscripción.remove();

Sólo comparte un solo OrientationData tipo cuando ambos implementaciones nativas garantizan los mismos campos. Si una plataforma omite angle, marca como opcional y fuerza a los llamadores a manejar undefined.

Elección de diseño Patrón más seguro
Entradas Interfaces de opciones nombradas
Resultados Tipos de promesas explícitos
Eventos Nombres de eventos literales
Limpieza Devuelve una suscripción removible

La interfaz es el contrato de puente, no la implementación nativa. Manténlo pequeño, predecible y probado.

Para comportamientos de plataforma, permisos y pasos de instalación, consulte el Capacitor Guía del plugin de orientación de pantalla. Una última costumbre que vale la pena adoptar: prueba tanto llamadas válidas como llamadas rechazadas bajo configuraciones de TypeScript estrictas. Esa combinación captura nombres de métodos incorrectos, campos faltantes y payloads de oyentes incompatibles mucho antes de que empaquetes tu aplicación móvil.

Capgo da a los equipos Capacitor una forma de enviar correcciones de JavaScript, CSS, configuración y activos sin tener que pasar por la revisión de la tienda de aplicaciones. La trampa es tratar su pipeline de actualización como cualquier otra frontera de API tipada, por lo que los canales, las reglas de lanzamiento, las comprobaciones de compatibilidad y las decisiones de rollback permanecen explícitas antes de que un paquete llegue al dispositivo de un usuario.

Una persona sosteniendo un teléfono móvil mostrando la diferencia entre los modos de orientación de pantalla de retrato y paisaje.

Define Contratos de Actualización

Comience definiendo exactamente qué valores acepta su automatización. Las uniones literales le impiden desplegar accidentalmente a un canal incorrecto, y las interfaces hacen que la relación entre un paquete y su versión nativa requerida sea auto-documentada.

tipo Canal = ‘beta’ | ‘staging’ | ‘producción’;

interface ActualizaciónSolicitada { canal: Canal; versiónDelPaquete: string; versiónMinimaDeLaVersiónNativa: string; porcentajeDeDespliegue: número; firmado: boolean; }

interface ResultadoDeActualización { aceptado: boolean; aplicadoEnLaSiguienteEjecución: boolean; habilitadoParaRetroceder: boolean; }

Un ejemplo de TypeScript TypeScript API example valida la solicitud antes de enviarla al cliente Capgo.

async función publicarActualización( solicitud: SolicitudDeActualización, ): Promesa Si (!request.signed || request.rolloutPercent < 0 || request.rolloutPercent > 100) { throw new Error('Solicitud de actualización no segura'); }

return capgo.publish(request);

The exact client method name shifts between Capgo SDK versions, so wrap it behind your own interface. That isolation pays off every time you upgrade and keeps vendor-specific details from leaking across your codebase.

Proteger Canales y Compatibilidad

La elección de un canal no debe ser casual. Una versión de producción requiere controles más estrictos que un experimento beta, especialmente cuando el paquete web llama a capacidades nativas que no existían en versiones de la aplicación anterior.

function canDeploy( request: UpdateRequest, installedNativeVersion: string, ): boolean { return request.firmado &amp;&amp; installedNativeVersion >= request.minNativeVersion; }

No compare las versiones con cadenas simples. Extraiga una biblioteca de versiones semánticas adecuada para 1.10.0 sorts después de 1.9.0Antes de que nada llegue a un canal, revise una lista de verificación:

  1. Confirme que el paquete está firmado.
  2. Verifique que el canal objetivo coincide con la intención.
  3. Compare las rangos de compatibilidad nativa y de paquete.
  4. Publique a un público limitado primero.
  5. Mantén rollback listo ante señales de falla.

Una pipeline de actualización tipada convierte la política de lanzamiento en code que revisores y CI pueden inspeccionar realmente.

Capgo’s entrega diferencial y controles de canal se ajustan a ese patrón de manera agradable, y su observabilidad a nivel de dispositivo permite a los equipos rastrear señales de adopción o fracaso después de hecho. Para el lado de la instrumentación de eventos, consulte esta guía para el seguimiento de eventos personalizados con Capgo.

Las claves de firma y las credenciales de administrador deben estar en el servidor o en el sistema CI, no en la aplicación embarcada. Aplicar la actualización en la próxima ejecución, probar el rollback con un paquete rechazado intencionalmente, y registrar cada decisión con un resultado tipado. Esa combinación mantiene la entrega rápida compatible con el control de lanzamiento móvil disciplinado.

Los oyentes tipados son lo que hace que las API asíncronas sean fáciles de confiar. Ya sea que un callback siga la orientación de la pantalla o un evento de actualización Capgo, debe recibir la misma forma de carga en cada plataforma — y el compilador debe ser el que lo enfoque.

interface UpdateEvent { versión: string; canal: ‘beta’ | ‘producción’; disponible: boolean; }

tipo Listener void (payload: T) =&gt; void

interface UpdateService { agregarEscuchador( evento: ‘actualizaciónDisponible’, callback: Listener, ): Promise&lt;{ eliminar: () =&gt; Promise} }&gt;;\nremoveAllListeners(): Promesa; }

This API’s entrega diferencial y controles de canal se ajustan a ese patrón de manera agradable, y su observabilidad a nivel de dispositivo permite a los equipos rastrear señales de adopción o fracaso después de hecho. Para el lado de la instrumentación de eventos, consulte esta guía para el seguimiento de eventos personalizados con API ancla el nombre de evento a una literal y vincula la llamada a un payload tipado. Su editor autocompleta version de forma gratuita, y el compilador rechaza cualquier llamada que espera datos no relacionados. Es una pequeña cantidad de configuración, y se paga cada vez que el API cambia.

¿Preferir verlo en acción? Mire el walkthrough:

Registra Escuchadores de forma Segura

Dentro de un componente, mantenga el manejador de suscripción alrededor para que la limpieza quede explícita. El mismo patrón se desliza en los hooks de ciclo de vida de Angular, efectos de React y montaje de Vue sin cambios.

let orientationHandle: { remove: () =&gt; Promise} } | undefined;

async function start() { orientationHandle = await ScreenOrientation.addListener( 'screenOrientationChange', ({ type, angle }) => { console.log(type, angle); }, ); }

función asíncrona stop() {\nawait orientationHandle?.remove();\norientationHandle = undefined;\n}

Run cleanup when a screen disappears — not only when the whole app closes. Skip it, and navigation leaves callbacks attached to native event sources. You end up with duplicate work and stale state updates that are painful to trace.

Cada framework te ofrece una función para esto:

  • Vanguardia — limpieza de desechos desde ngOnDestroy
  • React — devolver una función de limpieza segura asíncrona desde useEffect
  • Vue — eliminar la suscripción en onBeforeUnmount

Every addListener call should have a matching removal path.

Elige el método de limpieza correcto

Un manejador devuelto es la llamada correcta cuando un componente posee una sola suscripción. removeAllListeners() brilla cuando un servicio tiene varios oyentes y se está reiniciando por completo.

función asíncrona resetUpdates(servicio: ServicioActualización) { await servicio.removeAllListeners(); }

No dispare el método amplio desde un componente compartido mientras otras pantallas aún dependen del servicio. Cuando la propiedad es local, mantente con individuales remove() gestiona.

Situación Acción recomendada
Una suscripción de componente Llamar handle.remove()
Se recomienda llamar. Llamar removeAllListeners()
Cierre de servicio Registro repetido
Inicialización de guard Carga de paquete desconocida

Para Capgo notificaciones, mantenga los payloads de actualización separados de los eventos del dispositivo. Luego, pruebe la registro, entrega y limpieza por separado — el Capgo custom event tracking guide tiene más sobre el lado de la integración.

Antes de enviar, comprueba tres cosas: si el desmontaje elimina realmente los manejadores, si las promesas rechazadas se capturan y si ningún callback puede actualizar un componente destruido. Esa disciplina mantiene aplicaciones reactivas de Capacitor responsivas en Angular, React y Vue.

un desarrollador de software profesional trabajando en code en un entorno de trabajo dual con auriculares.

un __CAPGO_KEEP_0__ bien construido un ejemplo de API en TypeScript comienza con nombres que describen la intención. Utiliza verbos para métodos, sustantivos para interfaces y sigue con sufijos consistentes como Options, Resulty EventNombres claros reducen el tiempo de onboarding porque los desarrolladores comprenden el contrato sin abrir la implementación.

Mantén las interfaces públicas pequeñas. Expona capacidades a través de métodos enfocados en lugar de dumping operaciones relacionadas de manera suelta en un solo objeto.

  • getStatus() lee el estado.
  • updateConfig(options) modifica la configuración.
  • addListener(event, callback) se suscribe a cambios.

Define Entradas y Salidas con Precisión.

Utilice interfaces de opción nombrada cuando los parámetros pueden crecer:

interface OpcionesPublicar { canal: ‘beta’ | ‘producción’; porcentajeDespliegue: número; }

interface ResultadoPublicar { versión: string; aceptado: boolean; }

async function publicar( opciones: OpcionesPublicar, ): Promise { return cliente.publicar(opciones); }

Los generics ganan su lugar cuando un API envuelve diferentes cargas útiles pero necesita preservar sus tipos específicos:

interface RespuestaAPI { data: T; idSolicitud: string; }

async function solicitud(ruta: string): Promise<RespuestaAPI>&gt; { return fetchJson&lt;ApiResponse>&gt;(ruta);

No agregue generics solo para parecer flexible. Un generic debe expresar una relación real entre la entrada y la salida — de lo contrario, una interfaz concreta es más fácil de leer y mantener.

Haga que los estados inválidos sean difíciles de representarespecialmente en las fronteras nativas, de red y de actualización.

Documente el comportamiento justo al lado del contrato. Cubra permisos, unidades, promesas rechazadas, campos opcionales y si un método se aplica inmediatamente o en la próxima lanzamiento. Los comentarios en línea deben explicar decisiones, no repetir nombres de métodos.

Organice Code para el cambio

Separe tipos, lógica del cliente, adaptadores de plataforma y pruebas en archivos predecibles. Exporte tipos públicos desde un punto de entrada y mantenga detalles de implementación privados.

Preocupación Ubicación recomendada
Interfaces públicas types.ts
API métodos client.ts
Adaptadores nativos platform/
Pruebas de compatibilidad tests/

Para cambios importantes en plugins, introduce una nueva interfaz mayor o capa de compatibilidad, mantén métodos deprecated temporalmente y escribe pasos de migración. Conoce más sobre las estrategias de API de versión antes de cambiar consumidores.

Ejecuta comprobaciones de tipos estrictos y pruebas de contrato en CI antes de enviar. Para Capgo flujos de trabajo, verifica valores de canal, compatibilidad nativa, paquetes firmados y comportamiento de rollback como reglas de lanzamiento tipadas — esto mantiene actualizaciones rápidas bajo control a medida que crecen equipos, plataformas e integraciones.

¿Cómo debería tipificar resultados nativos dinámicos?

No permitas que any se filtre en tu code cuando un método nativo devuelve datos impredecibles. En su lugar, escribe los campos que puedes confiar en, marca valores genuinamente opcionales con ?y limpia la entrada incierta en la frontera antes de que cualquier cosa downstream lo toque.

interface Resultado Nativo { éxito: boolean; valor?: string; }

función asíncrona readValue(): Promesa const result = await NativePlugin.read(); return { success: Boolean(result.success), value: typeof result.value === ‘string’ ? result.value : undefined, };

Esta aproximación mantiene a los llamadores seguros mientras hace explícita la incertidumbre en el tipo mismo. Para una visión más amplia de este patrón de interfaz, revise la construcción de APIs en TypeScript.

Cómo Evitar Rechazos No Manejados?

Los callbacks asíncronos necesitan ser defensivos por diseño. Capturar fallas dentro del propio escuchador en lugar de confiar en el sistema de eventos para que silenciosamente engulla promesas rechazadas.

const handleUpdate = (event: UpdateEvent): void =&gt; { void applyUpdate(event).catch((error: unknown) =&gt; { console.error(‘Actualización fallida’, error); }); };

Conservar la referencia de suscripción y eliminarla cuando el componente se desmonte. Eso previene llamadas duplicadas y actualizaciones de estado caducadas — la sección del ciclo de vida del escuchador explora esto en detalle.

Cada escuchador asíncrono necesita tanto un camino de error como un camino de limpieza.

Cómo Proteger Actualizaciones Capgo?

Las claves de firma y las credenciales administrativas permanecen en su servidor o sistema CI. Periodo. El cliente solo debe recibir paquetes firmados y utilizar resultados tipados para mostrar el estado — nunca para crear firmas.

Antes de publicar, configura uniones de canales separados, ejecuta comprobaciones de compatibilidad, configura límites de despliegue y planifica tu ruta de rollback. Capgo gestiona la entrega firmada, el control de canal, la aplicación de lanzamiento siguiente y la protección de rollback para Capacitor y aplicaciones de Electron. Sus documentos muestran cómo los flujos de trabajo de liberación tipados pueden estrechar tu pipeline de actualización.

Actualizaciones en vivo para Capacitor aplicaciones

Cuando haya un error en la capa de web, envíe la corrección a través de Capgo en lugar de esperar días para la aprobación de la tienda de aplicaciones. Los usuarios obtienen la actualización en segundo plano mientras que los cambios nativos siguen en el camino de revisión normal.

Últimas noticias de nuestro Blog

Capgo te da las mejores perspectivas que necesitas para crear una aplicación móvil verdaderamente profesional.