【问题标题】:Type is missing the following properties from type类型缺少类型中的以下属性
【发布时间】:2019-03-15 11:10:41
【问题描述】:

我在打字稿文件中有以下界面。

export interface TempContext {
  FriendlyName?: boolean;
  hList: SelectFilterListItem[];
}

SelectFilterListItem 是另一个文件中的接口

export interface SelectFilterListItem {
  name: string;
  value: any;
}

然后我想在同一个文件的函数中使用它

filterDef: new SelectFilterDef({
        filterList: (context: TempContext) => context.hList,
      }),

我收到以下错误

Type '(context: TempContext) => SelectFilterListItem[]' 缺少 来自“SelectFilterListItem[]”类型的以下属性:pop、push、 concat、join 等 25 个。

【问题讨论】:

  • 最后一个 sn-p 与前两个有何关系?什么是 SelectFilterDef?什么是过滤器列表?该错误与您未发布的内容相关联:您应该传递一个 SelectFilterListItem 数组,而您传递的是一个函数。
  • 这是一个定制的(不是由我制作的)控件,其中包含太多无法在此处发布的代码(它还包含我无法发布的敏感信息)。然而,“filterList”可以使用一个函数,尽管在任何代码中都没有发生这种情况的例子。但我确信它可以发挥作用,尽管我认为它不能。我将与其他开发人员再次进行此操作。

标签: angular typescript


【解决方案1】:

据我所知,由于您的 hList 不是可选的,因此您必须向 context.hList 提供 SelectFilterListItem 类型的值,因为 hListSelectFilterListItem[] 类型,即对象数组

因此您的 filterDef 将更改为

    filterDef: new SelectFilterDef({
               filterList: (context: TempContext) => {
               context.hList = [{name: 'Test1',value: 'val1'},{name: 'Test2',value: 'val2'}]
               }
            })

【讨论】:

  • hList 填充在角度控制器中,因此此时它应该是一个对象数组。但是它甚至不会编译,所以不可能吗?
  • 这里你需要设置或拥有 hList 的值总是 SelectFilterListItem[] 类型否则角度编译器会抛出类型错误
  • 我也刚刚尝试过你的建议,但我仍然得到编译器错误。
  • 好的,这意味着您必须在 filterList 函数中传递上下文参数之前严格设置 SelectFilterListItem 类型的 hList 的值,或者您在 SelectFilterListItem 接口中提到的不同键可能不是名称和值,所以在这种情况下编译器也会抛出错误
  • 你可以在 filterList 函数中使用 console.log(context) 吗?并将上下文类型更改为任何这样的 - (context: any) 然后在此处共享该控制台输出
【解决方案2】:

像这样在TempContext文件中导入SelectFilterListItem的文件。

从“某个路径”导入 {SelectFilterListItem};

然后它会工作。

【讨论】:

  • 也可以这样替换export interface TempContext { FriendlyName?: boolean; hList: Array<SelectFilterListItem>; }
猜你喜欢
  • 2021-04-20
  • 2021-07-29
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 2020-05-23
  • 2020-04-09
相关资源
最近更新 更多