ts2339:属性'should'在类型Bluebird <boolean>上不存在

时间:2017-08-07 09:35:11

标签: typescript ecmascript-6 mocha chai commonjs

我在Typescript中编写了我的mocha测试,现在我正在es6中编译它

tsc *.ts --target es6 -m commonjs --watch

我在控制台中没有错误,
但是在WebStorm中,我用红色标记每个'should'chai-keyword(当我悬停它时,我得到一条消息: ts2339:属性'应该'在Bluebird类型上不存在 )。

例如我正在使用'chai',我想检查期望值是否为真:

import * as chai    from "chai";

export class WrapedChai {
     public shouldBeTrue(valueToTest : any){
        let expectedValue : boolean = true;
        expectedValue.should.equal(valueToTest);
    }
// or usintg SHOULD with a Promise
     public belongsToGLOErrorPromise(valueToTest: any) {
        let expectedValue   : boolean = true;
        return Promise.resolve(expectedValue).should.eventually.equal(valueToTest);
    } 
}

并且应始终以红色加下划线。

我试过了:

import { should } from 'chai';
should();

和此:

import chai = require('chai');
var should = chai.should();

但是'应该仍然将下划线标记为错误。

3 个答案:

答案 0 :(得分:0)

好的,我解决了这个问题。

解决问题的第一种方法(使用黑客):
问题在于TypeScript中的类型。而不是写

return Promise.resolve(isInstance).should.eventually.equal(expectedValue);

我将这部分分为两部分并写成:

let helpVariable : any = Promise.resolve(isInstance);
return helpVariable.should.eventually.equal(expectedValue);

这样我就应该对任何类型的变量抱怨。

出于某种原因&#39;应该&#39;如果它应用于任何其他类型(如:boolean,int,number,string ...),则下划线为错误

解决问题的第二种方法(使用&#39;导出&#39;关键字而不是&#39;应该&#39;):
首先导入关键字&#39; export&#39;像这样:

  import {expect} from 'chai';

然后,而不是写:

return Promise.resolve(isInstance).should.eventually.equal(expectedValue);

写:

return export(Promise.resolve(isInstance)).eventually.equal(expectedValue);

答案 1 :(得分:0)

这可以用npm install @types/chai解决。

答案 2 :(得分:0)

当前版本的Chai不再支持与“ any”不同的类型。

因此,建议您强制转换为“任意”。

4.2.0之前的先前版本仍然支持所有类型,因此使用先前版本可以解决该问题,并且可以毫无问题地使用它:

let expectedValue : boolean = true;
expectedValue.should.equal(valueToTest);

https://github.com/chaijs/chai/issues/1100