ошибка TS2322: тип 'Наблюдаемый«не присваивается типу» Наблюдаемый' - PullRequest
0 голосов
/ 15 октября 2018

Эта ошибка:

Ошибка TS2322: тип «Наблюдаемый» не может быть назначен типу «Наблюдаемый».Тип 'string []' нельзя назначить типу 'Sensors []'.Тип 'string' нельзя назначить типу 'Sensors'.

показать в этом коде машинописного текста:

    import { Observable } from 'rxjs/Rx';
    import { map, startWith } from 'rxjs/operators';

    filteredSensors: Observable<Sensors[]>;

        constructor(private fb: FormBuilder, private ws: SensorService
            ) {
                this.myform= new FormGroup({
                  'sensors_id': this.fb.array([], Validators.required),
                  'unit_price': new FormControl('', [Validators.required, Validators.nullValidator]),
                });

                    this.filteredSensors = this.myform.controls['sensors_id'].valueChanges
                  .pipe(
                    startWith(['']),
                  );
              }
        ngOnInit() {
           this.ws.getAllSensors().subscribe(
            sensors => {
            this.sensors = sensors
           }
         );
       }

В html у меня есть это: *ngFor="let sensor of filteredSensors | async | myPipe: sensors : 'sensor_serial': i"

И у меня есть этот канал:

    import { Pipe, PipeTransform } from '@angular/core';

    @Pipe({
        name: 'myPipe'
    })
 export class MyPipe implements PipeTransform {
    transform<T>(value: Sensors, list: T[], field: string, idx: number): T[] {
        const filterValue = value[idx] ? value[idx].toString().toLowerCase() : ''; //correct this line of as per Sensors object
        return list.filter(sensor => sensor[field].toLowerCase().indexOf(filterValue) === 0);
    }
}

Любая идея, пожалуйста, как решить эту ошибку?

Sensors.ts

export class Sensors {
    sensorType_id: number;
    sensortype_id: number;
    sensors_id: string;
    sensor_serial: string;
    active: number;
    sensordescription: string;
    unit_price: number;
    description: string;
    note: string;
    Sensor_id: number;
    default_price: number;
    client_id: string;
    client_name: String;

    constructor(obj: any) {

        this.sensorType_id = obj && obj.sensortype_id || obj.sensorType_id;
        this.sensortype_id = obj && obj.sensortype_id;
        this.client_id = obj && obj.client_id;
        this.sensor_serial = obj && obj.sensor_serial;
        this.sensors_id = obj && obj.sensors_id;
        this.active = obj && obj.active;
        this.sensordescription = obj && obj.sensordescription;
        this.unit_price = obj && obj.unit_price;
        this.description = obj && obj.description;
        this.note = obj && obj.note;
        this.Sensor_id = obj && obj.Sensor_id;
        this.default_price = obj && obj.default_price;
        this.client_name = obj && obj.client_name;
    }
}

и ws SensorService:

public getAllSensors(): Observable<Sensors[]> {
    let headers = new Headers();
    headers.append('x-access-token', this.auth.getCurrentUser().token);
    return this.http.get(Api.getUrl(Api.URLS.getAllSensors), {
        headers: headers
    })
        .map((response: Response) => {
            let res = response.json();
            if (res.StatusCode === 1) {
                this.auth.logout();
                return false;
            } else {
                return res.StatusDescription.map(sensors => {
                    return new Sensors(sensors);
                });
            }
        });
}

1 Ответ

0 голосов
/ 15 октября 2018

В вашем Pipe есть проблема с типом.В Pipe вы говорите, что он будет работать на String, однако вы передаете Sensors.Поэтому измените argument type на Pipe и внесите изменения в свой бизнес-логин внутри Pipe,

 @Pipe({
  name: 'myPipe'
})
export class MyPipe implements PipeTransform {
  transform(items: string[], value: string): any[] {
    if (!items) {
      return [];
    }
    let array =  items.filter(item => item == value);
    return  items.filter(item => item == value);
  }
}

в html

*ngFor="let sensor of filteredSensors | async | myPipe: i"

Примечание: «i» выше - это значение, по которому будет применяться фильтр.

Рабочая копия здесь - https://stackblitz.com/edit/angular-pipe-on-array

...