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()).