typescript - ts2339: egenskapen 'should' finnes ikke på typen Bluebird
Jeg skrev min mocha-test i Typescript, og nå kompilerer jeg den i es6
tsc *.ts --target es6 -m commonjs --watch
Jeg får INGEN feil i konsollen,
Men i WebStorm får jeg understreket hver 'should' chai-nøkkelord med rødt (når jeg holder musepekeren over det får jeg en melding: ts2339: egenskapen 'should' eksisterer ikke på typen Bluebird).
for eksempel bruker jeg 'chai' og jeg vil sjekke om forventet verdi er sann:
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);
}
}
og should er alltid understreket med rødt.
Jeg prøvde dette:
import { should } from 'chai';
should();
og dette:
import chai = require('chai');
var should = chai.should();
men 'should' forblir fortsatt understreket som en feil.
Svar #1
Dette kan løses med npm install @types/chai.
Svar #2
OK, jeg løste problemet.
FØRSTE MÅTE Å LØSE DET PÅ (bruk en hack):
Problemet var med typene i TypeScript. I stedet for å skrive
return Promise.resolve(isInstance).should.eventually.equal(expectedValue);
Jeg delte linjen i to deler og skrev slik:
let helpVariable : any = Promise.resolve(isInstance);
return helpVariable.should.eventually.equal(expectedValue);
på denne måten påfører jeg SHOULD på en variabel som har typen any.
Av en eller annen grunn blir 'should' understreket som en feil hvis det brukes på en annen type (som: boolean, int, number, string...)
ANDRE MÅTE Å LØSE DET PÅ (bruk nøkkelordet 'export' i stedet for 'should'):
først importer nøkkelordet 'export' slik:
import {expect} from 'chai';
da, i stedet for å skrive:
return Promise.resolve(isInstance).should.eventually.equal(expectedValue);
skriv :
return export(Promise.resolve(isInstance)).eventually.equal(expectedValue);
