库和角度出现“不是构造函数”错误

时间:2019-10-28 21:10:28

标签: angular typescript

我正在尝试为国际象棋游戏构建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,但这似乎是导入非模块脚本的错误方式

任何帮助都会得到广泛的赞赏

4 个答案:

答案 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();