如何使用Typescript捕获require抛出的错误?

odopli94  于 2023-06-24  发布在  TypeScript
关注(0)|答案(2)|浏览(180)

我尝试在Typescript中使用可选模块加载来加载webextension-polyfill-ts模块。
我需要这样做,因为我正在使用TypeScript构建一个库,它必须在nodejs,浏览器和浏览器扩展上工作。
不幸的是,底层Mozilla的webextension-polyfill在非WebExtension上下文中抛出错误。
使用TypeScript的可选加载,即使它不应该加载上下文中的模块,它也会抛出错误。
使用try-catch块,我无法捕获错误。
以下是示例:
使用可选加载

import * as Browser from "webextension-polyfill-ts";
let browser: any = false;

// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
// eslint-disable-next-line prettier/prettier
if (typeof chrome !== "undefined" && chrome.runtime && chrome.runtime.id) {
  browser = require("webextension-polyfill-ts");
} else {
  console.log("a");
}

export default browser;

使用try-catch

let browser: any = null;

try {
  browser = require("webextension-polyfill-ts");
} catch (e) {
  console.log("a");
}

export default browser;
kdfy810k

kdfy810k1#

不知道为什么你不能捕获错误,但也许可以尝试typescript导入?https://mariusschulz.com/blog/dynamic-import-expressions-in-typescript
看起来它返回了一个你可以捕获的promise。

import("./widget").then(widget => {
  widget.render(container);
}).catch((err) => { console.log('error', err) });
wwtsj6pe

wwtsj6pe2#

我知道为什么它不工作。它被绑定到tinyify。简单地删除它的使用browserify修复了这个问题。

相关问题