【问题标题】:Angular4 and TypeScript property does not exist on type any[]Angular4 和 TypeScript 属性在 any[] 类型上不存在
【发布时间】:2018-02-02 12:08:47
【问题描述】:

我似乎无法弄清楚这件事...我正在从 api 获取数据并将其存储为 any[]。我正在尝试获取这样的数据...

this.data.results[i].datas[j].dataType

但我得到错误属性结果不存在于任何 [] 类型上。我尝试查看许多其他问题和答案,但似乎无法弄清楚。

(我应该只创建一个数据对象,而不是将数据分配给任何[],而是将其分配给对象吗?) 感谢您的帮助!

【问题讨论】:

  • 能否请您提供更多代码以帮助您?
  • 以及准确和完整的错误消息。还要添加打印值 console.log(...) 准确返回的内容。你提到了any[],但你的代码没有显示你是如何使用它的。
  • 您是遇到打字稿编译错误还是运行时错误?

标签: angular typescript


【解决方案1】:

您应该将this.data 的类型定义更改为:

data: {results?: any[]} = {};

【讨论】:

  • @PierreDuc 我有一个动态表单,编译时不知道任何表单控件,在编译时我得到例如:类型“{}”上不存在属性“名称”。这种类型的表格有什么解决方案吗?我只在使用aot 编译时收到此错误
  • 将数据类型改为any,或改为{name?: string}
【解决方案2】:

我总是(如果可能的话)至少声明一个这样的接口:

interface IDataset {
    dataType: string;
    value: string;
    // Whatevery your dataset holds
}

interface IResultset {
    datas: IDataset[9]
}

interface IData {
    results: IResultset[];
}

class SomeClass {
    data: IData[];

    someFunction() {
        this.data.results[i].datas[j].dataType = "whatever";
    }
}

这样您就可以为您的数据获得 IntelliSense,必须以一种有意义的方式构建您的数据,并且可以在客户端和服务器端使用这些接口(如果您也在服务器上工作)

【讨论】:

  • 是的,我知道,我真的应该只声明对象/接口。但是我的固执开始了,我想以这种方式解决它:P 现在我这样做了,我将创建对象哈哈,我只是想要胜利的感觉
猜你喜欢
  • 1970-01-01
  • 2021-02-08
  • 2019-09-20
  • 2018-09-09
  • 2019-12-31
  • 2021-11-29
  • 2022-12-17
  • 2017-10-20
  • 2017-01-14
相关资源
最近更新 更多