繁体   English   中英

如何使用接口在 Typescript 的方法中添加数据?

[英]How to add data in a method in Typescript using interface?

我正在做一个购物车测验,在单击添加按钮时,产品详细信息使用事件发射器从子级传递到父级并传递到组件,但我无法理解如何将其添加到购物车? 由于产品和购物车界面中的属性不匹配,它在下面的 addproduct 方法中显示错误

addproduct(product: Product){this.cart.items.push(product)}

抛出错误:(参数)产品:“产品”类型的产品参数不可分配给“CartItem”类型的参数。 “产品”类型缺少“CartItem”类型的以下属性:项目、数量 (2345)

 export class AppComponent {
   products: Product[];
   cart: Cart;

constructor() {
     this.cart = {
     items: []
    } as Cart
 } 

   ngOnInit() {
this.products = [...PRODUCTS].map((product, index) => {
  product.id = index + 1;
  product.image = `/assets/images/items/${product.name.toLocaleLowerCase()}.png`;
  product.cartQuantity = 0;
  return product;
});   
    
 addToCart(product: Product) {
    this.cart.items.push(product); 
   }


**cart.ts**

export interface CartItem {
  id: number;
  item: string;
 quantity: number;
 }
export interface Cart {
  items: CartItem[];
 }

**Product.ts**

 export interface Product {
    name: string;
    price: number;
    id?: number;
    image?: string;
    cartQuantity?: number;
  }
  export enum UpdateMode {
     SUBTRACT,
    ADD
  }

app.component.html

 <app-product-list [products]="products"
                (onAddToCart)="addToCart($event)"
                (onQuantityUpdate)="updateCart($event)"
                class="flex-70"></app-product-list>
 <app-cart class="flex-30" [cart]="cart"></app-cart>

如何将产品发送到 cart.component.ts 文件中的输入属性

 export class CartComponent implements OnInit{
    @Input() cart: Cart;
       constructor() {}

您好,错误是因为您试图将 Product 类型的产品分配给 Cart 类型。 两者内部都有不同的密钥,并且都是强制性的。 乍一看,您可以像这样重构它,它应该可以工作。

    addToCart({id, name, cartQuantity}: Product) {
     let cart: CartItem = {
       id,
       item: name,
       quantity: cartQuantity
     };

    this.cart.items.push(cart); 
    console.log(this.cart)
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM