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 ответ

Это можно решить с помощью npm install @types/chai.

ОК, я решил проблему.

ПЕРВЫЙ СПОСОБ РЕШЕНИЯ ЭТОГО (используйте хак):
Проблема была с типами в 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);

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

Другие вопросы по тегам