6
votes

I am trying to build an app, where I want to get my posts, at first, by user and then when a post is clicked, I want to get this particular post by id.

And finally I get the following errors:

ERROR in src/app/cars/car-detail/car-detail.component.ts(25,11): error TS2322: Type 'Observable<{ _id: string; title: string; content: string; imagePath: string; creator: string; }>' is not assignable to type 'Car[]'.

Property 'includes' is missing in type 'Observable<{ _id: string; title: string; content: string; imagePath: string; creator: string; }>'.

src/app/cars/car-detail/car-detail.component.ts(26,11): error TS2322: Type 'number' is not assignable to type 'string'.

import { Input, Component, OnInit } from '@angular/core';
import { Car } from '../car.model';
import { CarsService } from '../cars.service';
import { ActivatedRoute, Params } from '@angular/router';


@Component({
  selector: 'app-post-detail',
  templateUrl: './post-detail.component.html',
  styleUrls: ['./post-detail.component.css']
})
export class PostDetailComponent implements OnInit {
  @Input() post: Post[] = [];
  @Input() id: string;
  constructor(
    private postsService: PostsService,
    private route: ActivatedRoute
  ) { }

  ngOnInit() {
    this.route.params
      .subscribe(
        (params: Params) => {
          this.post = this.postsService.getPost(this.id);
          this.id = +params['id'];
        }
      );
  }

}

What should I do?

2

2 Answers

4
votes

1)

@Input() id: string is of type string, but when you do this.id = +params['id']; - + operator tries to parse params['id'] to number, so why you get error.

Set type of the @Input() id: string to number.

2)

this.post = this.postsService.getPost(this.id);

As I consider getPost returns an observable. You need to subscribe to it and then assign the result returned from the call to the post property.

this.postsService.getPost(this.id).subscribe(res => this.post = res);
1
votes

I came up with similar situation when trying out this.

error TS2322: Type 'number' is not assignable to type 'string'

Following are the error I got When was implementing a node rest api.

error TS2322: Type 'string' is not assignable to type 'number | FindOperator<number>'.

27     const product = await repository.find({ id: req.params.id });

I had to simply change variable type from id:number to id: string.

The assocaited variable which used in this function is declared in another file. The declaration type of the that particular variable (in my case it is named as 'id') is not compatible with the variable type of the line producing the error.

So go to the place of declaration and set the variable type to number/string depending on the type, then it will compatible with the rest of the functions.