Typescript 类型化对象数组,不可分配给类型';任何[]和#x27;

Typescript 类型化对象数组,不可分配给类型';任何[]和#x27;,typescript,Typescript,我想根据类型定义一个对象。在该对象中是一个数组,由与给定类型相对应的元素组成。但是,我只想稍后将元素推送到这个数组,并暂时将其初始化为空。但这给了我一个错误,我无法理解。我的app.ts中有以下几行内容: const publishObject: MqttPublishObject = { IsTurnedOff: detail.isTurnedOff, processType: detail.pro

我想根据类型定义一个对象。在该对象中是一个数组,由与给定类型相对应的元素组成。但是,我只想稍后将元素推送到这个数组,并暂时将其初始化为空。但这给了我一个错误,我无法理解。我的app.ts中有以下几行内容:

const publishObject: MqttPublishObject = {
                        IsTurnedOff: detail.isTurnedOff,
                        processType: detail.processType.name === "linear" ? 0 : 1,
                        anchorPoints: <MqttPublishAnchorPoint>[]
                      };
export interface MqttPublishObject {
   IsTurnedOff : boolean;
   processType : number;
   anchorPoints : MqttPublishAnchorPoint[];
}
TypeDef位于以下文件中:

mqttPublishObject.ts

const publishObject: MqttPublishObject = {
                        IsTurnedOff: detail.isTurnedOff,
                        processType: detail.processType.name === "linear" ? 0 : 1,
                        anchorPoints: <MqttPublishAnchorPoint>[]
                      };
export interface MqttPublishObject {
   IsTurnedOff : boolean;
   processType : number;
   anchorPoints : MqttPublishAnchorPoint[];
}
mqttPublishAnchorPoint.ts

export interface MqttPublishAnchorPoint {
    hour: number;
    minute: number;
    second: number;
    intensity: number;
}

我觉得我走错了方向,但我不知道怎么做。到底是什么问题?

这些错误基本上告诉您两件事:

  • 第一个错误表示您试图将类型为
    MqttPublishAnchorPoint
    的值分配给类型为
    MqttPublishAnchorPoint[]
    的字段。这意味着TypeScript不知何故不将数组视为数组,而是将其视为
    MqttPublishAnchorPoint
  • 原因由第二个错误给出:您试图将数组类型(
    undefined[]
    )的某些值强制转换为
    MqttPublishAnchorPoint
    ),TypeScript无法理解此断言,因为类型是不重叠的
这两个错误的核心原因是强制转换:
[]
表示
[]作为T
,而不是
[]作为T[]
,即强制转换应用于数组,而不是其内部类型。解决方法很简单:

const publishObject: MqttPublishObject = {
  IsTurnedOff: detail.isTurnedOff,
  processType: detail.processType.name === "linear" ? 0 : 1,
  anchorPoints: <MqttPublishAnchorPoint[]>[],
};

[]
表示作为MqttPublishAnchorPoint的
[],而不是作为MqttPublishAnchorPoint的
[]
。这可能是错误的原因。啊,谢谢!我是这样解决的:[]。如果你愿意回答这个问题,我可以给你一个公认的答案。