Правая часть арифметической операции c должна иметь тип 'any', 'number', 'bigint' или тип enum - PullRequest
1 голос
/ 28 февраля 2020

У меня есть этот код в JS, и мне нужно, чтобы он работал в TypeScript.

categoryAxis.renderer.labels.template.adapter.add("dy", function(dy, target) {
      if (target.dataItem && target.dataItem.index & 2 == 2) {
        return dy + 25;
      }
      return dy;
    });

На этом 2 == 2 Я получаю ошибку.

Ответы [ 3 ]

1 голос
/ 28 февраля 2020

Похоже, что машинопись сначала делает 2 == 2, который превращается в true, а затем target.dataItem.index & true, что неправильно. Попробуйте добавить скобки (target.dataItem.index & 2) == 2.

1 голос
/ 28 февраля 2020

Если это действительно точное значение javascript, которое вы имели:

target.dataItem && target.dataItem.index & 2 == 2

Тогда это то же самое, что

target.dataItem && target.dataItem.index & (2 == 2)
target.dataItem && target.dataItem.index & true

Значение true будет автоматически принудительно javascript как 1, но TypeScirpt не будет делать это неявно.

, поэтому, если вы напишите это:

target.dataItem && target.dataItem.index & 1

или

target.dataItem && target.dataItem.index & +true

в TypeScript, он компилирует и выполняет так же, как ваш выше javascript.

В противном случае ваш javascript уже был неправильным, и один из других ответов здесь уже предлагает вам различные исправления.

0 голосов
/ 28 февраля 2020

Ваша проблема, вероятно, target.dataItem.index & 2, я предполагаю, что вы имели в виду двойные амперсанды: target.dataItem.index && 2

...