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 , string
number
o 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.
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
, number
o 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.
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;
olet 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.