0

我正在尝试开发仅在某些系统上运行的软件包。还有一个“模拟”版本的包也存在。

我想要一个“模块”,我可以import从我的主包中自动回退到包的“模拟”版本,当主包无法导入时(因为它由于操作系统/引擎限制而没有安装,或者它失败了启动时)。

这是我到目前为止所拥有的:

import { Gpio as GpioClass, GpioBank as GpioBankClass, Notifier as NotifierClass } from 'pigpio';

let pigpio: {
  Gpio: typeof GpioClass;
  GpioBank: typeof GpioBankClass;
  Notifier: typeof NotifierClass;
};

try {
  pigpio = require('pigpio');
} catch (e) {
  process.env.PIGPIO_NO_LOGGING = 'yes';
  pigpio = require('pigpio-mock');
}

export const { Gpio, GpioBank, Notifier } = pigpio;

这种工作但似乎会导致我的代码的其他部分出现一些导入错误/排序问题。

我怀疑从长远来看,使用importandexport会更好。也许这是一个有缺陷的假设。我仍然不是 100% 清楚import/是如何export工作的。

我试过使用“异步”import(...)功能无济于事:

import { Gpio as GpioClass, GpioBank as GpioBankClass, Notifier as NotifierClass } from 'pigpio';

let pigpio: Promise<{
  Gpio: typeof GpioClass;
  GpioBank: typeof GpioBankClass;
  Notifier: typeof NotifierClass;
}>;

try {
  pigpio = import('pigpio');
} catch (e) {
  process.env.PIGPIO_NO_LOGGING = 'yes';
  pigpio = import('pigpio-mock');
}

// This doesn't work. Cannot use top level await.
export const { Gpio, GpioBank, Notifier } = await pigpio;

我是否缺少某些export工作方式?或者也许就像你如何才能await实现一个非async函数,只要它返回一个 Promise 而我只需要它module.exports = import(...)?然而,这似乎不起作用。

最重要的是为 TypeScript 获取正确的类型信息。

4

0 回答 0