ts2339: свойство 'should' не существует для типа Bluebird<boolean>
Я написал свой тест мокко в Typescript, и теперь я собираю его в es6
tsc *.ts --target es6 -m commonjs --watch
Я не получаю ошибку в консоли,
Но в WebStorm я подчеркиваю каждое ключевое слово 'should' chai красным цветом (когда я нахожу его, я получаю сообщение: ts2339: свойство 'should' не существует для типа Bluebird).
например, я использую 'chai' и хочу проверить, является ли ожидаемое значение true:
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();
но "следует" по-прежнему подчеркивается как ошибка.
1 ответ
ОК, я решил проблему.
ПЕРВЫЙ СПОСОБ РЕШЕНИЯ ЭТОГО (используйте хак):
Проблема была с типами в TypeScript. Вместо того чтобы писать
return Promise.resolve(isInstance).should.eventually.equal(expectedValue);
Я разделил строку на две части и написал так:
let helpVariable : any = Promise.resolve(isInstance);
return helpVariable.should.eventually.equal(expectedValue);
таким образом я применяю СЛЕДУЕТ к переменной, которая имеет тип any.
По какой-то причине "следует" подчеркивается как ошибка, если оно применяется к любому другому типу (например: логическое значение, int, число, строка...)
ВТОРОЙ СПОСОБ РЕШЕНИЯ ЭТОГО (используйте ключевое слово "экспорт" вместо "должен"):
Сначала импортируйте ключевое слово "экспорт" следующим образом:
import {expect} from 'chai';
тогда вместо того чтобы писать:
return Promise.resolve(isInstance).should.eventually.equal(expectedValue);
записывать:
return export(Promise.resolve(isInstance)).eventually.equal(expectedValue);
Текущая версия Chai больше не поддерживает типы, отличные от any.
Так что ваше предложение использовать "любой" - это хорошо.
Также предыдущая версия до 4.2.0 по-прежнему поддерживает все типы, поэтому использование предыдущей версии может решить эту проблему и использовать ее без проблем:
let expectedValue : boolean = true;
expectedValue.should.equal(valueToTest);