Compartir a través de


Restricciones de TypeScript en scripts de Office

Los scripts de Office usan el lenguaje TypeScript. En su mayor parte, cualquier código TypeScript o JavaScript funcionará en scripts de Office. Sin embargo, el Editor de código aplica algunas restricciones para asegurarse de que el script funciona de forma coherente y según lo previsto con el libro de Excel.

Ningún tipo "any" en los scripts de Office

Escribir tipos es opcional en TypeScript, ya que los tipos se pueden inferir. Sin embargo, los scripts de Office requieren que una variable no pueda ser de tipo ninguno. No se permiten explícitas e implícitas any en los scripts de Office. Estos casos se notifican como errores.

Explícito any

No se puede declarar explícitamente una variable para que sea de tipo any en scripts de Office (es decir, let value: any;). El any tipo produce problemas al procesarlo Excel. Por ejemplo, debe Range saber que un valor es , stringnumbero boolean. Recibirá un error en tiempo de compilación (un error antes de ejecutar el script) si alguna variable se define explícitamente como el any tipo en el script.

Mensaje explícito

Error explícito

En la captura de pantalla anterior, [2, 14] Explicit Any is not allowed indica que la línea 2, columna 14 define el any tipo. Esto le ayuda a localizar el error.

Para solucionar este problema, defina siempre el tipo de la variable. Si no está seguro del tipo de una variable, puede usar un tipo de unión. Esto puede ser útil para las variables que contienen Range valores, que pueden ser de tipo string, numbero boolean (el tipo de Range valores es una unión de los siguientes: string | number | boolean).

Implícita any

Los tipos de variables typeScript se pueden definir implícitamente . Si el compilador de TypeScript no puede determinar el tipo de una variable (ya sea porque el tipo no está definido explícitamente o no es posible la inferencia de tipos), entonces es un error implícito any y recibirá un error en tiempo de compilación.

Mensaje implícito

El caso más común en cualquier implícita any está en una declaración de variable, como let value;. Hay dos maneras de evitar esto:

  • Asigne la variable a un tipo de identificación implícita (let value = 5; o let value = workbook.getWorksheet();).
  • Escriba explícitamente la variable (let value: number;)

No se heredan las clases o interfaces de Office Script

Las clases e interfaces que se crean en el script de Office no pueden ampliar ni implementar las clases o interfaces de Scripts de Office. En otras palabras, nada en el ExcelScript espacio de nombres puede tener subclases o subinterfaces.

Funciones typeScript incompatibles

Las API de scripts de Office no se pueden usar en lo siguiente:

eval no se admite

La función eval de JavaScript no se admite por motivos de seguridad.

Identificadores restringidos

Las siguientes palabras no se pueden usar como identificadores en un script. Son términos reservados.

  • Excel
  • ExcelScript
  • console

Solo funciones de flecha en devoluciones de llamada de matriz

Los scripts solo pueden usar funciones de flecha al proporcionar argumentos de devolución de llamada para métodos Array . No se puede pasar ningún tipo de identificador o función "tradicional" a estos métodos.

const myArray = [1, 2, 3, 4, 5, 6];
let filteredArray = myArray.filter((x) => {
  return x % 2 === 0;
});
/*
  The following code generates a compiler error in the Office Scripts Code Editor.
  filteredArray = myArray.filter(function (x) {
    return x % 2 === 0;
  });
*/

No se admiten uniones de ExcelScript tipos y tipos definidos por el usuario

Los scripts de Office se convierten en tiempo de ejecución de bloques de código sincrónicos a asincrónicos. La comunicación con el libro a través de promesas está oculta al creador del script. Esta conversión no admite tipos de unión que incluyan ExcelScript tipos y tipos definidos por el usuario. En ese caso, Promise se devuelve al script, pero el compilador de scripts de Office no lo espera y el creador del script no puede interactuar con Promise.

En el ejemplo de código siguiente se muestra una unión no admitida entre ExcelScript.Table y una interfaz personalizada MyTable .

function main(workbook: ExcelScript.Workbook) {
  const selectedSheet = workbook.getActiveWorksheet();

  // This union is not supported.
  const tableOrMyTable: ExcelScript.Table | MyTable = selectedSheet.getTables()[0];

  // `getName` returns a promise that can't be resolved by the script.
  const name = tableOrMyTable.getName();

  // This logs "{}" instead of the table name.
  console.log(name);
}

interface MyTable {
  getName(): string
}

Los constructores no admiten instrucciones y console API de Scripts de Office

console las instrucciones y muchas API de Scripts de Office requieren sincronización con el libro de Excel. Estas sincronizaciones usan await instrucciones en la versión en tiempo de ejecución compilada del script. await no se admite en constructores. Si necesita clases con constructores, evite usar las API o console instrucciones de Scripts de Office en esos bloques de código.

En el ejemplo de código siguiente se muestra este escenario. Genera un error que indica failed to load [code] [library].

function main(workbook: ExcelScript.Workbook) {
  class MyClass {
    constructor() {
      // Console statements and Office Scripts APIs aren't supported in constructors.
      console.log("This won't print.");
    }
  }

  let test = new MyClass();
}

Advertencias de rendimiento

Linter del Editor de código proporciona advertencias si el script puede tener problemas de rendimiento. Los casos y cómo solucionarlos se documentan en Mejora del rendimiento de los scripts de Office.

Llamadas API externas

Consulte Compatibilidad con llamadas API externas en scripts de Office para obtener más información.

Vea también