Electron项目自定义TypeScript类调用isRunning方法报TypeError错误
排查TypeError: roadHouse.isRunning is not a function的问题
我来帮你一步步拆解这个问题,结合你给出的代码和配置,主要有几个核心原因和对应的解决办法:
1. 子类构造函数未调用super()
你的RoadHouse类继承了Object,在TypeScript中有个硬性规则:只要子类自定义了构造函数,必须先调用super()初始化父类原型链。你现在的构造函数里完全没加这一行,会导致类的方法无法正确挂载到实例上,最终出现isRunning is not a function的异常。
修复方法:
修改RoadHouse的构造函数,补上super()调用:
export class RoadHouse extends Object { // ... 其他属性定义 constructor(private _message: String = "", private _prompt: String = "") { super(); // 必须添加这一行,初始化父类 // this.setStatus(_message); } // ... 其他方法 }
2. 未正确导入RoadHouse类
你的main.ts直接实例化了RoadHouse,但没有添加对应的导入语句。如果跳过导入步骤,TypeScript会把RoadHouse当作全局变量处理(或者编译时忽略类型校验),最终实例化的对象根本不是RoadHouse类的实例,自然没有isRunning方法。
修复方法:
假设你的RoadHouse类定义在同目录的roadhouse.ts文件中,在main.ts顶部添加导入语句:
import { RoadHouse } from './roadhouse'; var roadHouse:RoadHouse = new RoadHouse("Hello"); console.log("Is running:" + roadHouse.isRunning());
3. package.json入口配置错误
你的package.json里main字段设置为index.js,但你的编译入口是main.ts,编译后生成的是main.js。Electron启动时会读取main字段指定的文件,入口不对的话,代码可能根本没正确执行,或者实例化逻辑完全走偏。
修复方法:
修改package.json的main字段为编译后的入口文件:
{ "name": "typescript-electron", "version": "1.0.0", "description": "Electron and Typescript", "main": "main.js", // 改成main.js "scripts": { "test": "start electron ." }, "devDependencies": { "electron": "^5.0.3" } }
4. 补充:确保TypeScript编译所有文件
检查你的tsconfig.json,如果没有include字段,tsc可能不会编译所有.ts文件。添加include字段确保所有代码都被编译:
{ "compilerOptions": { "target": "es5", "module": "commonjs", "sourceMap": true, "strict": true, "esModuleInterop": true, "strictNullChecks":false }, "include": ["*.ts"] // 确保所有.ts文件被编译 }
最后验证步骤
- 执行你的Build Task(
tsc),确认生成了main.js和roadhouse.js文件; - 运行
npm run test启动Electron,检查控制台输出是否正常。
内容的提问来源于stack exchange,提问作者1.21 gigawatts
相关产品推荐
相关产品推荐

