web-dev-qa-db-ja.com

エラーTS2322:タイプ 'number'はタイプ 'string'に割り当てることができません

最初はユーザーごとに投稿を取得したいアプリを作成しようとしています。次に、投稿をクリックすると、この特定の投稿をIDごとに取得したいと思います。

そして最後に、次のエラーが発生します。

Src/app/cars/car-detail/car-detail.component.ts(25,11)のエラー:エラーTS2322:タイプ 'Observable <{_ id:string;タイトル:文字列;内容:文字列; imagePath:文字列;作成者:文字列; }> 'はタイプ' Car [] 'に割り当てることはできません。

プロパティ 'includes'がタイプ 'Observable <{_ id:string;にありません。タイトル:文字列;内容:文字列; imagePath:文字列;作成者:文字列; }> '。

src/app/cars/car-detail/car-detail.component.ts(26,11):エラーTS2322:タイプ 'number'はタイプ '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'];
        }
      );
  }

}

私は何をすべきか?

4
Tolis

1)

@Input() id: stringの型はstringですが、_this.id = +params['id'];_ --_+_演算子は、_params['id']_をnumberに解析しようとします。エラーが発生する理由。

@Input() id: stringのタイプをnumberに設定します。

2)

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

私が考えると、getPostobservableを返します。サブスクライブしてから、呼び出しから返された結果をpostプロパティに割り当てる必要があります。

_this.postsService.getPost(this.id).subscribe(res => this.post = res);
_
3
Suren Srapyan

this を試してみると、同じような状況が思い浮かびました。

エラーTS2322:タイプ 'number'はタイプ 'string'に割り当てることができません

以下は、ノードのRESTAPIを実装したときに発生したエラーです。

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

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

変数の型をid:numberからid: stringに変更するだけで済みました。

この関数で使用された関連変数は、別のファイルで宣言されています。その特定の変数の宣言タイプ(私の場合は「id」という名前)は、エラーを生成する行の変数タイプと互換性がありません。

したがって、宣言の場所に移動し、型に応じて変数の型を数値/文字列に設定すると、残りの関数と互換性があります。

0