在此代码中,我声明了一个标为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
我无法解决问题。
答案 0 :(得分:1)
由于要返回数组(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
}
答案 1 :(得分:1)
在我看来,您实际上是在指定函数正在返回Row[]
[Row, Row, Row]
,而实际上它正在返回Row
{price_abc: ''...}
。因此,您应该将功能调整为以下界面:
static generateRow(serverResponds: ServerRespond[]): Row {...
代替Row[]