Estoy tratando de crear una extensión de Chrome en mecanografiado.

Tengo el siguiente código, donde intento enviar un mensaje al contenido del script desde el script de fondo.

// background script 
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
   chrome.tabs.sendMessage(tabs[0].id, {action: "open_dialog_box"}, function(response) {
      console.log(response);
   });  
});

Pero mecanografiado da el siguiente error

ERROR in /Users/shobi/Projects/Chrome Extensions/src/js/background.ts(8,37)
      TS2345: Argument of type 'number | undefined' is not assignable to parameter of type 'number'.
  Type 'undefined' is not assignable to type 'number'.

Intenté convertir la identificación en un número entero usando parseInt (), pero aún así no evita el error.

6
Shobi 16 oct. 2018 a las 17:53

2 respuestas

La mejor respuesta

La pestaña de Chrome .id posiblemente no esté definida (porque es definido como opcional en las definiciones de tipo), lo que significa que cuando usa strictNullChecks debe usar una aserción no nula:

tabs[0].id!

O escriba el código para asegurarse de que la identificación no sea nula:

if (tabs[0].id) { // send message
3
Aaron Beall 16 oct. 2018 a las 15:17

Supongo, pero tal vez mecanografiado piense que su matriz de pestañas podría estar vacía (y por lo tanto no tener un elemento en el índice [0]), por lo que su tipo se infiere como número o indefinido.

Si este es el caso, debe verificar que las pestañas [0] existan antes de intentar acceder a la propiedad id.

1
Filip Wojciechowski 16 oct. 2018 a las 15:02