当前位置: 首页 > 知识库问答 >
问题:

类型“Object”上不存在属性“”。可观测订阅

鄢开诚
2023-03-14

我刚刚开始使用Angular2,我有一个我不能真正理解的问题。

我创建了一些模拟数据:

export const WORKFLOW_DATA: Object =
{
    "testDataArray" : [
        { key: "1",              name: "Don Meow",   source: "cat1.png" },
        { key: "2", parent: "1", name: "Roquefort",    source: "cat2.png" },
        { key: "3", parent: "1", name: "Toulouse",   source: "cat3.png" },
        { key: "4", parent: "3", name: "Peppo", source: "cat4.png" },
        { key: "5", parent: "3", name: "Alonzo",     source: "cat5.png" },
        { key: "6", parent: "2", name: "Berlioz", source: "cat6.png" }
    ]
};

然后将其导入服务并“观察”

import { Injectable } from '@angular/core';

import { WORKFLOW_DATA } from './../mock-data/workflow'
import {Observable} from "rxjs";

@Injectable()
export class ApiService {

  constructor() { }

  getWorkflowForEditor(): Observable<Object>
  {
      return Observable.of( WORKFLOW_DATA );
  }

}

然后我有一个组件,在构造函数中:

constructor( private apiService: ApiService)
    {
        this.apiService.getWorkflowForEditor().subscribe( WORKFLOW_DATA => {
            console.log( WORKFLOW_DATA);
            console.log( WORKFLOW_DATA.testDataArray );
        } );
    }

第一个控制台。日志记录包含testDataArray属性的Object类型的对象。

第二个控制台。日志,在编译时导致错误:

Property 'testDataArray' does not exist on type 'Object'.

同时仍按预期记录对象[Object, Object,...]的数组。

我真的不明白为什么,我肯定我做错了什么,我想要一个解释。

谢谢你的帮助!

共有3个答案

阎弘
2023-03-14

返回类型,如果您的方法是可观察的

>

  • 键入不同的数据和返回类型

    WORKFLOW_DATA: { testDataArray: any } = []
    
    getWorkflowForEditor(): Observable<{ testDataArray: any }>
    

    或者只需将响应数据键入assert toany

    console.log( (<any>WORKFLOW_DATA).testDataArray );
    

  • 辛才俊
    2023-03-14

    当你告诉tyescript:

    WORKFLOW\u数据:对象

    你告诉它WORKFLOW_DATA是一个没有属性的普通对象。当您稍后尝试访问WORKFLOW_DATA. testDataArray时,编译器认为您误用了类型。

    如果要对工作流\u数据进行类型检查,则需要创建一个描述对象的界面。

    李星波
    2023-03-14

    Typescript希望工作流\u数据对象此处:

    .subscribe( WORKFLOW_DATA => {} )
    

    因为你是这么说的:

      getWorkflowForEditor(): Observable<Object>
    

    但是Object没有testDataArray属性。。。您应该告诉TypeScript数据可以有任何属性:

      getWorkflowForEditor(): Observable<any>
    

    或者使用

    console.log( WORKFLOW_DATA["testDataArray"] );
    
     类似资料:
    • 我想使用以下代码实现文件下载: RestAPI: 服务: 组件: 当我启动angular时,我得到错误:src/app/panel/service/download中的错误。服务ts(17,91):错误TS2339:类型“Observable”上不存在属性“map”。 将导入代码的正确wya是什么?当我点击下载按钮时,什么也没发生。

    • 我使用的是完全修补过的Visual Studio 2013。我正在尝试使用JQuery、JQueryUI和JSRender。我也在尝试使用打字。在ts文件中,我得到如下错误: 类型“{}”上不存在属性“fade div”。

    • 我试图在登录过程后获得连接的用户模型, 首先,在CanActivate guard检查了带有用户JSON对象的本地存储并发现该对象为空之后,用户将重定向到“/login”URL 然后用户登录并重定向回根URL“/”,在连接过程中我使用AuthService,它将从服务器返回的用户对象保存在用户模型中 这是我的守卫:

    • 我是个新手。目前我正在学习6个特征。当我试图处理错误时,会出现如下问题:, 未找到模块:错误:无法解析“D:\WORKSPACE\Angular5\binding\src\app”中的“rxjs/add/observable/throw” 找不到模块:错误:无法解决'D:\WORKSPACE\Angular5\绑定\src\app'中的'rxjs/add/操作员/捕获' src/app/emplo

    • 升级到Angular 6.0和Rxjs到6.0后,我收到以下编译错误:

    • 获取错误:(类型窗口中不存在属性“MktoForms2”