我正在尝试为国际象棋游戏构建Angular应用程序。我想将库围棋{.3}}与在https://github.com/jhlywa/chess.js/blob/master/README.md中声明的类型一起使用 但是,每当我运行该应用程序时,运行时就会出错。
我已经通过
通过npm安装了软件包npm install --save chess.js @types/chess.js
在使用该库的服务中,我得到了以下相关代码:
import {Chess, ChessInstance} from "chess.js"
@Injectable({
providedIn: 'root'
})
export class GameService {
private chess: ChessInstance = new Chess()
constructor() {}
...
}
我得到的错误是:
core.js:15724 ERROR Error: Uncaught (in promise): TypeError: chess_js__WEBPACK_IMPORTED_MODULE_4__.Chess is not a constructor
TypeError: chess_js__WEBPACK_IMPORTED_MODULE_4__.Chess is not a constructor
我也尝试将其导入为:
import * as Chessjs from "chess.js"
@Injectable({
providedIn: 'root'
})
export class GameService {
private chess: Chessjs.ChessInstance = new Chessjs.Chess()
constructor() {}
...
}
没有成功。
我也尝试过从app.module.ts中声明Chess.js,但这似乎是导入非模块脚本的错误方式
任何帮助都会得到广泛的赞赏
答案 0 :(得分:1)
我无法使用它,因为Chess
并未定义为class
,而是定义为const
所以首先卸载类型:
npm uninstall --save @types/chess.js
然后像这样使用它。
import * as Chess from "chess.js
chess:any = new Chess();
唯一的问题是您将没有类型(经过测试和工作)
更新
基于此answer进行了修改,因此您的编辑器可以识别类型,可以使用已安装的类型
import { ChessInstance } from 'chess.js'
ChessReq:any = require('chess.js');
Chess:ChessInstance = new this.ChessReq();
然后使用Chess.header()
例如出现在编辑器上的类型
(也经过测试并且可以正常工作)
答案 1 :(得分:0)
您可以这样导入
import * as Chess from 'chess.js';
并像这样使用它:
const chess: Chess = new Chess();
答案 2 :(得分:0)
我使用的是chess.js版本0.10.3,我发现@yazantahhan部分正确。以下对我有用。只需确保文件路径正确即可,因为它可能与我的不同。
import * as Chess from './chess';
const chess = new Chess();
答案 3 :(得分:0)
在所有环境(浏览器,Jest,VSCode)中,其他答案都没有对我起作用。
这是我解决的方法:
import * as ChessJS from "chess.js";
const Chess = typeof ChessJS === "function" ? ChessJS : ChessJS.Chess;
const chess = new Chess();