首页 > 解决方案 > Typescript过滤器中回调函数的类型是什么?

问题描述

ordersData = [
  { id: 100, name: 'order 1' },
  { id: 200, name: 'order 2' },
  { id: 300, name: 'order 3' },
  { id: 400, name: 'order 4' }
  ];
  

constructor( private objHelloService: HelloServiceService, private formBuilder: FormBuilder ) 
  {  
    this.form = this.formBuilder.group({
      orders: new FormArray([])
      });
       
      this.addCheckboxes();
  }

  private addCheckboxes() 
  {
    this.ordersData.forEach((o, i) => {
                                        const control = new FormControl(i === 0); // if first item set to true, else false
                                        (this.form.controls.orders as FormArray).push(control);
                                      });
  }
  

submit() 
    {
      const selectedOrderIds = this.form.value.orders.map((v:string, i:number) => v ? this.form.value.orders[i].id : null).filter(v => v !== null);
      console.log(selectedOrderIds);
    }

问题在这里:

.filter(v => v !== null)

打字稿说我没有指定v.
这里的类型是v什么?
如何指定?

标签: javascriptangulartypescript

解决方案


试试下面,

const selectedOrderIds = this.form.value.orders
                               .filter(i => i !== null)  //Filter array of orders by null check
                               .map(v => v.id)  //Get only ids out of array of orders
                     

ordersData = [
  { id: 100, name: 'order 1' },
  null,
  { id: 200, name: 'order 2' },
  null,
  { id: 300, name: 'order 3' },
  null,
  { id: 400, name: 'order 4' }
  ];
  
const selectedOrderIds = ordersData
                      .filter(i => i !== null) //Filter array of orders by null check
                      .map(v => v.id)  //Get only ids out of array of orders
  
  
console.log(selectedOrderIds)  //[100, 200, 300, 400]


推荐阅读