gpt4 book ai didi

javascript - 无法将 remote.require() 与 TypeScript 一起使用

转载 作者:搜寻专家 更新时间:2023-10-30 20:59:56 24 4
gpt4 key购买 nike

我正在使用 TypeScript 开发 Electron 应用程序,但遇到了一个令人沮丧的问题。

我正在尝试使用以下代码从渲染器进程运行模块:

import { remote } from 'electron'

const myModule = remote.require('./my-module')

我可以使用的唯一方法 remote.require对于我的模块,是通过将 module.exports = myModule 添加到 my-module.ts 文件中。

// my-module.ts
export class myModule { ... }

module.exports = myModule

添加 module.exports = myModule 行后,它会在我使用标准 TypeScript 导入导入 myModule 的地方导致错误。

例如

// main.ts
import { myModule } from './my-module'
// Error here

要修复此错误,我可以简单地将导入语句替换为

const myModule = require('./my-module')

但是当我将 import 语句替换为上面的语句时,我的 TypeScript 无法识别 myModule 及其所有成员。智能感知没有显示 myModule 并且 TypeScript 抛出一堆错误,即使程序运行得很好。


一些注意事项:

  1. 我的 tsconfig.json 的内容是:

    {
    "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "./",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "alwaysStrict": true,
    },
    "exclude": [
    "node_modules"
    ]
    }
  2. 在编译后的 JavaScript 代码中,当与 TypeScript 导入语句一起使用时,它会产生类似于以下内容的结果:

    var my_module_1 = require("./my-module");
    my_module_1.myModule.foo('bar');

    这给我一个错误 TypeError: Cannot read property 'sayHi' of undefined

    JavaScript 应该看起来像这样才能工作:

    var my_module_1 = require("./my-module");
    my_module_1.foo('bar');

如何将 remote.require() 与 TypeScript 一起使用?

最佳答案

当您在 ESM 中实现您的代码并将其导入 commonjs 时(这就是 remote.require() 所做的),您将获得模块命名空间对象:

// myModule.ts
export function foo() { ... }

// and to access the default export:
export default const boo = 'boo'

// consumer.js
const myModule = require('./myModule')

myModule = { foo() { ... }, default: 'boo' }

因此,要使用您的 myModule 类,您需要这样做:

const myModule = remote.require('./myModule')

const obj = new myModule.myModule()
const boo = myModule.default

更新:remote.require() 是动态调用,因此 TypeScript 无法检测 myModule 的类型并将其设置为 any.

您可以执行以下操作来取回类型:

import * as MyModule from './myModule'
const myModule: typeof MyModule = remote.require('./myModule')

关于javascript - 无法将 remote.require() 与 TypeScript 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49016677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com