Skip to content

Cómo usar TypeScript con Salesforce – Parte 2 ☁️

Esta es una traducción que desde EGA Futura ofrecemos como cortesía a toda la Ohana y comunidad de programadores , consultores , administradores y arquitectos de Salesforce para toda Iberoamérica .

El enlace a la publicación original, lo encontrarás al final de este artículo.

En esta segunda publicación de nuestra serie de dos partes sobre TypeScript, analizaremos los distintos lugares en los que puede utilizar TypeScript dentro del ecosistema de Salesforce.

Le recomendamos encarecidamente que lea la publicación anterior (Parte 1), antes de leer esta. En él explicamos qué es TypeScript y en qué se diferencia de JavaScript. Cubrimos cómo puede adoptar gradualmente TypeScript en sus proyectos eligiendo el nivel de rigor de verificación de tipo que necesita. También analizamos cómo VS Code tiene un servicio de lenguaje TypeScript incorporado que muestra sugerencias y resalta los errores en su código a medida que termina de escribir. Finalmente, brindamos un vistazo a varios conceptos de TypeScript, como tipos e interfaces, genéricos, enumeraciones y módulos.

Ahora que tiene una comprensión básica de cómo funciona TypeScript, veamos dónde y cómo puede usar TypeScript con Salesforce.

Componentes web Lightning

Actualmente, Lightning Web Components (LWC) tiene soporte limitado para TypeScript. No es posible realizar una verificación de tipo entre el archivo JavaScript y la plantilla HTML o realizar una verificación de tipo entre componentes. Por ejemplo, no hay forma de garantizar que los tipos de propiedad pasados desde un componente principal coincidan con el tipo esperado en el componente secundario. Además, el compilador de la plataforma LWC no puede procesar los archivos TypeScript ( *.ts ) presentes en un paquete LWC que se implementa en Salesforce Platform.

Sin embargo, puede aprovechar al máximo el servicio de lenguaje TypeScript de VS Code y usar los niveles menos estrictos de TypeScript como se describe en la publicación anterior. Incluso puede aprovechar los archivos de declaración de TypeScript para declarar tipos que se pueden usar en diferentes componentes. Dado que el servicio de idiomas solo proporciona un análisis estático, no debe preocuparse por compilar o agregar pasos adicionales a su implementación.

Para comenzar, primero debe especificar los tipos mediante construcciones JSDoc . Luego, agregue el indicador //@ts-check al principio del archivo JavaScript para habilitar la verificación de tipos. VS Code ahora resaltará los errores de tipo como se muestra en la siguiente captura de pantalla.

Como práctica recomendada, habilite la verificación de tipos para todos sus componentes LWC a la vez agregando el indicador checkJs a compilerOptions en el archivo jsconfig.json presente en la carpeta lwc de su proyecto lwc . Además, asegúrese de agregar ESNext como target en las opciones del compilador (el valor predeterminado, si no se especifica, es ES3). Esto evitará que aparezcan errores en las funciones de ES5+, como los accesores de obtener/establecer.

 "Opciones del compilador": { "Decoradores experimentales": cierto, "checkJs": cierto, "objetivo": "ESSiguiente"
}
...

Con el indicador checkJs agregado, ya no necesita agregar //@ts-check a cada archivo. En su lugar, para omitir la verificación de tipos en archivos específicos, agregue el indicador //@ts-nocheck al principio de esos archivos.

Al trabajar con datos de Salesforce, puede definir tipos para cada objeto con el que trabaja. En caso de que se pregunte acerca de las definiciones de objetos en la .sfdx/typings /lwc/sobjects/ , esas son declaraciones de tipo para campos individuales que importa a través de @salesforce/schema/<objecname>.<fieldname> . Estos son creados automáticamente por el paquete de extensión de Salesforce . Si bien define el tipo de campos individuales, no contiene la definición del objeto en sí.

Así es como se define un tipo de objeto, por ejemplo, un contacto.

 /** * @typedef Contacto * @tipo {objeto} * @propiedad {cadena} Id. * @propiedad {cadena} Nombre * @propiedad {cadena} Apellido * @property {boolean} isActive__c - tu edad. */ exportar clase predeterminada Hello extiende LightningElement { /** @tipo {Contacto[]} */ contactos; }

VS Code recogerá esto, hará cumplir los tipos y mostrará sugerencias automáticamente. En el siguiente GIF, puede ver que cuando escribe un punto ( . ) después de contacts , muestra métodos de matriz como at , fill , every , etc. ya que contacts es una matriz. Pero cuando escribe un punto ( . ) después de contacts[0] , muestra las propiedades del tipo de contacto que definió anteriormente.

Los tipos definidos en un componente se pueden importar dentro de otro. Así es como un componente HelloBinding importaría el tipo Contact definido en el componente Hello .

 exportar la clase predeterminada HelloBinding extiende LightningElement { /** @type {import('../Hola/Hola').Contacto} */ resultado; }

Para asegurarse de que sus definiciones de tipos personalizados estén disponibles en todos sus componentes sin tener que importarlos manualmente, puede crear un archivo de declaración de TypeScript ( *.d.ts ) en la raíz de su proyecto y declarar tipos utilizando alias de tipo o interfaces. . Por ejemplo, puede crear un archivo mytypes.d.ts y crear dos tipos.

 contacto de interfaz { identificación: cadena, nombre: cadena
} orden de interfaz { identificación: cadena, número de pedido: número
}

A continuación, debe indicarle a TypeScript que también mire este archivo para encontrar las declaraciones de tipo. Puede hacerlo agregando la ubicación del archivo a la propiedad de include del archivo jsconfig.json presente en la carpeta lwc de su proyecto lwc .

 "incluir": [ "**/*", "../../../../.sfdx/typings/lwc/**/*.d.ts", "../../../../mistipos.d.ts"
],

Ahora puede usar estos tipos en sus componentes LWC usando la sintaxis JSDoc, sin tener que importarlos.

 /** @tipo { Contacto } */
contactos;

El archivo de declaración se puede enviar a su control de código fuente para que todos los desarrolladores del proyecto puedan usar el mismo archivo.

La carpeta .sfdx/typings en su proyecto SFDX también contiene declaraciones de tipo predefinidas para módulos integrados como adaptadores Lightning Message Service y Lightning Data Service. Dado que la ubicación de esta carpeta también está presente en la propiedad include de jsconfig.json , puede usar estos tipos predefinidos en sus componentes. Por ejemplo, el resultado de una operación getRecord tiene una determinada forma, es decir, tiene propiedades predefinidas que no cambian según el objeto que está consultando. Puede usar las sugerencias de VS Code para deducir e importar dichos tipos.

Si desea una verificación de tipo más estricta o desea crear sus componentes utilizando archivos .ts , primero debe ejecutar el compilador de TypeScript antes de implementar sus componentes en la Plataforma de Salesforce. Una opción es crear un gancho CLI de Salesforce de predeploy previa que ejecute el comando tsc para compilar sus archivos TypeScript en archivos JavaScript.

Tiempo de ejecución web Lightning

Al usar Lightning Web Runtime (LWR) para crear aplicaciones de una sola página que se ejecutan fuera de la plataforma, puede optar por usar la variante TypeScript de LWC durante la creación del proyecto .

Esto crea un proyecto que usa archivos TypeScript ( *.ts ) para componentes web Lightning en lugar de JavaScript. LWR compila automáticamente estos archivos antes de enviarlos al cliente (navegador). Si aún no está presente, asegúrese de crear un archivo tsconfig.json en la raíz del proyecto.

A continuación se muestra un ejemplo de un componente LWC de TypeScript simple que utiliza tipos estándar e interfaces personalizadas. Mientras que Line 17 funciona correctamente en tiempo de ejecución, TypeScript lo trata como un error, ya que estamos tratando de establecer una propiedad que no es válida para ese tipo.

Incluso aquí, puede crear sus propios archivos de declaración de tipo para respaldar su implementación. Como práctica recomendada, cree una carpeta de types en la raíz de su proyecto y coloque sus archivos *.d.ts en esta carpeta.

 // mis.d.ts
contacto de interfaz{ identificación: cadena, nombre: cadena
}

A continuación, agregue la ruta de la carpeta de types a la propiedad de include de tsconfig.json .

 { "incluir": ["src/**/*", "tipos/*"]
}

Ahora puede usar estos tipos personalizados en sus componentes.

 exportar la clase predeterminada HelloWorldApp extiende LightningElement { contra: contacto;
}

Funciones de la fuerza de ventas

TypeScript es uno de los lenguajes admitidos para crear funciones de Salesforce : solo pase typescript al indicador -l cuando ejecute el comando de generate function .

 sf generate function -n myfunction -l typescript

Este comando crea una función de TypeScript que está estructurada exactamente como un proyecto típico de TypeScript con archivos como index.ts y tsconfig.json .

Una función TypeScript incluye además el SDK de funciones de Salesforce para Node.js ( sf-fx-sdk-nodejs ) como una dependencia en el archivo package.json . Este SDK proporciona un montón de diferentes tipos e interfaces predefinidos que puede importar y usar en su código. Gracias a estos tipos predefinidos, conoce con precisión la forma de un parámetro, propiedad o tipo de devolución, lo que facilita mucho el trabajo con datos de Salesforce.

Incluso puede crear sus propios tipos o importar tipos de una biblioteca de terceros si está utilizando una. Por ejemplo, podemos instalar la biblioteca node-fetch (ver documentos ) desde npm y usar los tipos definidos por la biblioteca. En el siguiente ejemplo, estamos importando y usando el tipo ReferrerPolicy de la biblioteca.

Además, consulte esta receta de función de TypeScript que devuelve la información de la organización de Salesforce adjunta al contexto.

La biblioteca @salesforce/ts-types

La biblioteca @salesforce/ts-types (ver docs ) proporciona una colección de tipos comúnmente deseados y una colección de funciones de reducción de tipos para escribir protectores de tipos concisos. Por ejemplo, el tipo AnyJson se puede usar para contener cualquier objeto JSON sin tipo, y diferentes funciones como hasBoolean , isBoolean , getBoolean pueden obtener el valor de un tipo específico del objeto JSON.

El uso de esta biblioteca también garantiza la seguridad del tipo de tiempo de ejecución. Aquí hay un ejemplo:

 importar {AnyJson, asJsonArray, asegurarJsonMap, hasBoolean, getBoolean} de "@salesforce/ts-types"; respuesta constante: AnyJson = [{ comienzo: 0, éxito: cierto, resultados: [{ nombre: 'primero' }, { nombre: 'segundo' }]
}]; const resultados = asJsonArray(respuesta, []);
resultados.paraCada(elemento=>{ dejar registro = asegurarJsonMap(elemento); if(hasBoolean(registro, 'éxito')){ let isSuccessful = getBoolean(registro, 'éxito') // el tipo de isSuccessful es booleano }
});

Complementos de CLI de Salesforce

Basado en OCLIF , se crea un complemento de la CLI de Salesforce mediante TypeScript. Este complemento también usa la biblioteca @salesforce/ts-types mencionada anteriormente. También puede ver el concepto de genéricos en acción al usar la función de query de la biblioteca JSforce . En el siguiente ejemplo, puede ver que se ha creado una Organization de interfaz personalizada y se establece explícitamente como tipo para la función de query genérica, que establece automáticamente el tipo de result en Organization .

 ejecución asíncrona pública(): Promise<AnyJson> { ... const query = 'Seleccionar nombre, fecha de caducidad de prueba de la organización'; // El tipo que estamos consultando interfaz Organización { Nombre: cadena; Fecha de caducidad de prueba: cadena; } // Consultar la organización const result = await conn.query<Organización>(consulta); ...
}

aplicaciones flojas

Una de las muchas formas de crear aplicaciones de Slack es usar Node.js con la biblioteca @slack/bolt agregada como dependencia. Puede agregar fácilmente typescript como una dependencia adicional y comenzar a usar TypeScript para crear aplicaciones de Slack. Aquí hay una aplicación Bolt de muestra que se crea con TypeScript. Al igual que el SDK de funciones de Salesforce para Node.js, la biblioteca Bolt también viene con un montón de tipos predefinidos como SlashCommand , SlackEvent , MessageEvent , BlockAction y muchos más. La documentación para usar TypeScript con Slack es un trabajo en progreso, así que esté atento a las actualizaciones.

Resumen

Las oportunidades de usar TypeScript con diferentes niveles de rigor en diferentes productos de Salesforce están aumentando gradualmente y, con suerte, esta publicación de blog le ha dado una buena idea de ellas. Ahora que ha visto cómo TypeScript puede ayudarlo a escribir un código robusto que dará como resultado menos errores de tiempo de ejecución, ¿qué le parece intentarlo?

Aquí hay algunos recursos que lo ayudarán en el camino:

Sobre el Autor

Aditya Naag Topalli es una defensora de desarrolladores líder certificada 14 veces en Salesforce. Capacita e inspira a los desarrolladores dentro y fuera del ecosistema de Salesforce a través de sus videos, seminarios web, publicaciones de blog y contribuciones de código abierto, y también habla con frecuencia en conferencias y eventos en todo el mundo. Síguelo en Twitter o LinkedIn y mira sus contribuciones en GitHub .

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2022/04/how-to-use-typescript-with-salesforce-part-2.html

Últimas novedades 
de EGA Futura

EGA Futura incorpora toneladas de vídeo-tutoriales

La gestión visual de la información se hace cada vez más fácil en EGA Futura

La Plataforma EGA Futura crece en transparencia con su servicio de monitoreo de productos

EGA Futura le permite trabajar a sus Clientes de manera Remota en la Era Post-Digital

1954
Desde hace más de 25 años potenciamos a las Empresas de Iberoamérica

🎬 Video de Juan Manuel Garrido » Claves para tu Productividad diaria 🙌✅

🎬 Video de EGA Futura » Facturación Electrónica en Uruguay » Conceptos básicos con EGA Futura Windows

🎬 Video de EGA Futura » Facturación Electrónica en Uruguay » Configuración de EGA Futura Windows

🎬 Video de EGA Futura » Facturación Electrónica en Uruguay » Funcionamiento con EGA Futura Windows

🎬 Video de EGA Futura » Configuración de la Plataforma EGA Futura

🎬 Video de EGA Futura » Configuración de usuario en EGA Futura

🎬 Video de EGA Futura » Como automatizar la publicación en Redes Sociales?

🎬 Video de Juan Manuel Garrido » Cómo restaurar la configuración de fábrica de EGA Futura Windows sin perder la información

🎬 Video de Juan Manuel Garrido » Factura electrónica: Prueba de Factura Electronica previa a la activacion

🎬 Video de EGA Futura » Como se registran los Beneficios de cada Empleado en la base de datos de EGA Futura

🎬 Video de EGA Futura » EGA Futura Time Clock » Reloj de Control horario y asistencia

🎬 Video de EGA Futura » Como registrar Observaciones en un Empleado dentro de EGA Futura People?

🎬 Video de EGA Futura » Cómo registrar la Educación de cada Empleado en EGA Futura People?

🎬 Video de EGA Futura » Como hacer la Desvinculación de un Empleado? (Offboarding)

🎬 Video de EGA Futura » Como registrar Habilidades o Skills de empleados dentro de EGA Futura

🎬 Video de EGA Futura » Como hacer el Onboarding o Proceso de Incorporación de un Empleado?

🎬 Video de EGA Futura » Cómo administrar Turno de trabajo dentro de EGA Futura

🎬 Video de EGA Futura » Que es un Ticket interno dentro de la Plataforma EGA Futura

🎬 Video de EGA Futura » Que son los Entrenamientos de Empleado en EGA Futura people?

🎬 Video de EGA Futura » Qué son los Epics dentro de EGA Futura

🎬 Video de EGA Futura » Qué es EGA Futura People?

🎬 Video de EGA Futura » EGA Futura People » Asistencias

🎬 Video de EGA Futura » Soporte EGA Futura » Software de Gestión Windows vs Software de Gestión Nube 🤩

🎬 Video de EGA Futura » ツ Comparando un Objeto con un Fichero

🎬 Video de EGA Futura » ✍( ͡* ͜ʖ ͡*) ¿Qué es una Aplicación?

Cómo usar TypeScript con Salesforce - Parte 2 ☁️
Cómo usar TypeScript con Salesforce – Parte 2 ☁️