微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 无法使用TypeScript的remote.require()

我正在使用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

要修复此错误,我只需将import语句替换为

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

但是当我将import语句替换为上面的语句时,我的TypeScript无法识别myModule及其所有成员.对于myModule,intelisense没有显示任何内容,即使程序运行正常,TypeScript也会引发一堆错误.

有些事情需要注意:

>我的tsconfig.json的内容是:

{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "moduleResolution": "node",
        "outDir": "./",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "alwaysstrict": true,
    },
    "exclude": [
        "node_modules"
    ]
}

>在编译的JavaScript代码中,当与TypeScript导入语句一起使用时,会产生类似下面的内容

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

这给了我一个TypeError的错误:无法读取未定义的属性’sayHi’.

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

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

如何在TypeScript中使用remote.require()?

解决方法:

当您在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')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐