Pesquisa de site

javascript - TS2774: Esta condição sempre retornará verdadeiro, pois esta função está sempre definida. Você quis dizer para chamá-la em vez disso


interface A {
        a: () => boolean;
    }

    class AImpl implements A {
        public a(): boolean {
            return true;
        }
    }

    it('should fail', function () {
        const aImpl = new AImpl();
        if (aImpl.a) { // TS2774: This condition will always return true since this function is always defined. Did you mean to call it instead?
            console.log("always true");
        }
    });

    it('why success', function () {
        const aImpl = new AImpl();
        if (!aImpl.a) { // nothing happens here
            console.log('always false');
        }
    });

por que aImp.a reporta TS2774, mas !aImpl.a funciona bem?

E há alguma maneira de encontrar a desreferência de propriedade em uma declaração de método?

Resposta #1

Como observado por Ramesh Reddy nos comentários, se você chamar if(aImpl.a), isso sempre retornará true porque você definiu a propriedade aImpl.a.
Você essencialmente converte a referência da propriedade em booleano, e isso sempre será verdadeiro porque essa propriedade está definida.

O que você provavelmente queria fazer é chamar a função que você implementou.
Em outras palavras, if (aImpl.a()).