Я получаю сообщение об ошибке при использовании свойств интерфейса, объявленных в моем коде. Почему я получаю сообщение об ошибке, хотя код правильный? - PullRequest
0 голосов
/ 02 августа 2020

Здесь в этом коде я объявил интерфейс с меткой Row. Я использовал свойства далее в коде, но это вызывает ошибку.

Код-

import { ServerRespond } from './DataStreamer';

export interface Row {
  price_abc: number,
  price_def: number,
  ratio: number,
  timestamp: Date,
  upper_bound: number,
  lower_bound: number,
  trigger_alert: number | undefined,
}


export class DataManipulator {
  static generateRow(serverResponds: ServerRespond[]): Row[] {
    const priceABC = (serverResponds[0].top_ask.price + serverResponds[0].top_bid.price) / 2;
    const priceDEF = (serverResponds[1].top_ask.price + serverResponds[1].top_ask.price) / 2;
    const ratio = priceABC / priceDEF;
    const upperBound = 1 + 0.05;
    const lowerBound = 1 + 0.05;
    return {
        price_abc: priceABC,
        price_def: priceDEF,
        ratio,
        timestamp: serverResponds[0].timestamp > serverResponds[1].timestamp ?
          serverResponds[0].timestamp : serverResponds[1].timestamp,
        upper_bound: upperBound,
        lower_bound: lowerBound,
        trigger_alert: (ratio > upperBound || ratio < lowerBound) ? ratio : undefined,
      };
  }
}

Ошибка-

Type error: Type '{ price_abc: number; price_def: number; ratio: number; timestamp: Date; upper_bound: number; lower_bound: number; trigger_alert: number | undefined; }' is not assignable to type 'Row[]'.
  Object literal may only specify known properties, and 'price_abc' does not exist in type 'Row[]'.  TS2322
  • Я попытался удалить а затем снова установить машинописный текст.
  • Я несколько раз пытался установить необходимые модули узлов.

Я не могу решить проблему.

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Мне кажется, что вы указываете, что функция возвращает Row[] [Row, Row, Row], хотя на самом деле возвращает Row {price_abc: ''...}. Поэтому вы должны настроить свою функцию на следующий интерфейс:

static generateRow(serverResponds: ServerRespond[]): Row {...

Вместо Row[]

1 голос
/ 02 августа 2020

Поскольку вы хотите вернуть массив (Row []) ([] указывает, что вы хотите вернуть массив этого объекта), но вы возвращаете только один объект, вам необходимо настроить к этому. Либо так (где вы возвращаете только строку):

 static generateRow(serverResponds: ServerRespond[]): Row { // The [] are removed so you only return a single object
    const priceABC = (serverResponds[0].top_ask.price + serverResponds[0].top_bid.price) / 2;
    const priceDEF = (serverResponds[1].top_ask.price + serverResponds[1].top_ask.price) / 2;
    const ratio = priceABC / priceDEF;
    const upperBound = 1 + 0.05;
    const lowerBound = 1 + 0.05;
    return {
        price_abc: priceABC,
        price_def: priceDEF,
        ratio,
        timestamp: serverResponds[0].timestamp > serverResponds[1].timestamp ?
          serverResponds[0].timestamp : serverResponds[1].timestamp,
        upper_bound: upperBound,
        lower_bound: lowerBound,
        trigger_alert: (ratio > upperBound || ratio < lowerBound) ? ratio : undefined,
      };
  }

Либо так (где вы возвращаете только массив строк):

 static generateRow(serverResponds: ServerRespond[]): Row[] {
    const priceABC = (serverResponds[0].top_ask.price + serverResponds[0].top_bid.price) / 2;
    const priceDEF = (serverResponds[1].top_ask.price + serverResponds[1].top_ask.price) / 2;
    const ratio = priceABC / priceDEF;
    const upperBound = 1 + 0.05;
    const lowerBound = 1 + 0.05;
    return [{ // Here is the array wrapper around so you return an array with one entry
        price_abc: priceABC,
        price_def: priceDEF,
        ratio,
        timestamp: serverResponds[0].timestamp > serverResponds[1].timestamp ?
          serverResponds[0].timestamp : serverResponds[1].timestamp,
        upper_bound: upperBound,
        lower_bound: lowerBound,
        trigger_alert: (ratio > upperBound || ratio < lowerBound) ? ratio : undefined,
      }]; // And here with ] you close the array
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...