TS2345:类型 'number | undefined' 的参数不可分配给类型 'number' 的参数



我正在尝试在打字稿中创建Chrome扩展。

我有以下代码,我尝试从后台脚本向内容脚本发送消息。

// 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);
});  
});

但是打字稿给出以下错误

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'.

我尝试使用 parseInt(( 将 id 转换为整数,但仍然无法阻止错误。

Chrome的选项卡.id可能是未定义的(因为它在类型定义中被定义为可选的(,这意味着在使用strictNullChecks时,您必须使用非空断言:

tabs[0].id!

或者编写代码以确保 id 不为空:

if (tabs[0].id) { // send message

我猜,但也许打字稿认为你的选项卡数组可能是空的(因此索引 [0] 处没有项目( - 这就是为什么它的类型被推断为数字或未定义?

如果是这种情况,您应该在尝试访问其上的 id 属性之前检查 tabs[0] 是否存在。

相关内容

  • 没有找到相关文章

最新更新