0

收到以下错误:

expression of type
  ?Product/798
cannot produce expected type
  {id : Nat; name : Text; price : Nat; sku : Text}

当试图遍历一个 id 列表时,获取相应的 HashMap 值,并且仅当 get() 函数返回一个 Product 时才添加到新数组中。

for (id in productIds.vals()) {
   var product: ?Product = products.products.get(id);

   if (product != null) {
      products_list := Array.append<Product>(products_list, [product]);
   };
};

我可能误解了解决这个问题的最佳方法吗?似乎我不应该得到任何错误,因为如果它不是 Product 类型(这是它引用的“预期类型”),它应该继续,对吧?

4

1 回答 1

1

该变量product是 type ?Product,但您的函数实例化Array.append需要一个普通类型的值数组Product

比较null不会神奇地改变变量的类型。您需要将其与 a 进行模式匹配switch以提取实际值:

switch product {
  case (?p) { products_list := Array.append<Product>(products_list, [p]) };
  case null { ...do something else... };
}
于 2021-07-07T13:38:49.600 回答