Typescript 的过滤器中回调函数的类型是什么?

时间:2021-01-21 05:19:55

标签: javascript angular 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)

Typescript 说我没有指定 v 的类型。
这里的 v 是什么类型?
如何指定?

2 个答案:

答案 0 :(得分:3)

试试下面,

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]

答案 1 :(得分:1)

取决于 orderData 架构,它会是这样的

{id: number, name: string}

但是在您将其映射到一个 ID 数组之后,您的架构 将是这样的

.filter((v: number) => v !== null)
相关问题