打字稿@types/chai - 你如何使用Chai.Assertion?

Typescript @types/chai - how do you use Chai.Assertion?

我正在尝试在 typescript 中使用 chai,但我无法让任何断言像我期望的那样工作。

package.json

"dependencies": {
  "@types/chai": "^4.0.1",
  "@types/mocha": "^2.2.41",
  "chai": "^4.1.0",
  "mocha": "^3.4.2",
  "typescript": "2.4.2"
}

所有这些都会发出编译器错误:

import * as chai from 'chai';
const expect = chai.expect;
const assert = chai.assert;

const expect = chai.expect;
expect(myVar).to.be.empty();
expect(myVar).to.be.empty;
expect(myVar).to.be.undefined();
expect(myVar).to.be.undefined;

如果我尝试直接导入断言 - 我没有将 empty() 视为有效断言:

const assert = chai.assert;
assert.empty??? not there?

欢迎提出任何想法。

谢谢 - 乍得


快答

Shaun 在下面指出 - 将导入更改为:

import { assert, expect } from 'chai';

谢谢肖恩

不幸的是,assert 的类型不包括 isEmpty(...)will probably change for 4.0.3。与此同时,我们可以在其上投射 assert as any 并调用 isEmpty(...)

一旦你安装了这些类型,这可能对你有用:

import chai = require("chai");
const assert = chai.assert;
const expect = chai.expect;

expect("").to.be.empty;
expect(undefined).to.be.undefined;
(assert as any).isEmpty("");

另一种方法是在导入时解构:

import { assert, expect } from "chai";

expect("").to.be.empty;
expect(undefined).to.be.undefined;
(assert as any).isEmpty("");

这是 VSCode 中的样子。

除 Shaun 的回答外:如果您需要导入 应该 Chai 接口...

import { assert, expect } from "chai"; //Import the Expect & Assert Interfaces
import 'chai/register-should'; // Import the Should Interface 

参考;

https://www.chaijs.com/guide/styles/#should