2016-10-23 17 views
3

のパラメータに割り当てられない私持っている私はカジノ・マネジメント・システムを作成するために使用しています次のコード、:Angular2 /活字体:エラーTS2345:型「文字列」の引数はタイプ「文字列」

import { Component, OnInit } from '@angular/core'; 
import { Router }   from '@angular/router'; 
import { Observable }  from 'rxjs/Observable'; 
import { Subject }   from 'rxjs/Subject'; 

import { SearchService } from './search.service'; 
import { Data } from './datatypings'; 

@Component({ 
    moduleId: module.id, 
    selector: 'casino-search', 
    templateUrl: 'search.component.html', 
    styleUrls: [ 'search.component.css' ], 
    providers: [SearchService] 
}) 

export class SearchComponent implements OnInit { 

    data: Observable<Data[]>; 

    private searchTerms = new Subject<String>(); 

    constructor(
    private searchService: SearchService, 
    private router: Router) {} 
    // Push a search term into the observable stream 
    search(term: string): void { 
    this.searchTerms.next(term); 
    } 

    ngOnInit(): void { 
    this.data = this.searchTerms 
     .debounceTime(150)  // wait for 150ms pause in events 
     .distinctUntilChanged() // ignore if next search term is same as previous 
     .switchMap(term => term // switch to new observable each time 
     // return the http search observable 
     ? this.searchService.search(term) 
     // or the observable of empty data if no search term 
     : Observable.of<Data[]>([])) 
      .catch(error => { 
     // TODO: real error handling 
     console.log(error); 
     return Observable.of<Data[]>([]); 
     }); 
    } 

    gotoDetail(data: Data): void { 
    let link = ['/detail', data.id]; 
    this.router.navigate(link); 
    } 
} 

私は活字体からJavaScriptにこのコードをtranspileしようとしたときしかし、私はこのエラーを取得する:

app/data/search.component.ts(37,37): error TS2345: Argument of type 'String' is not assignable to parameter of type 'string'. 
    'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible. 

は今、私は単純に角度括弧内stringStringを変更することで、エラーを修正しましたが、私のことができるようにしたいです今後も同様のエラーを発生させずに処理を進めてください。私ができる最高のコードを書くためにlso ...だから私は誰かが私のためにこれをクリアすることができますか疑問に思っています:

私はラッパークラスを持つパラメータがプリミティブクラスをカプセル化し、私はここに間違っている場合は私を修正し、より基本的により広範に宣言された変数型の内容をより単純なプリミティブに割り当てることができない理由がわかります。

エラーが暗示しているような一般的な意味で、Angular2/Typescriptの 'String'型よりも 'string'型を使用する方が望ましい理由は何ですか?これが優先されるのは何ですか?

+0

これを 'new subject ()に変更しようとします。 "small s" ' – micronyks

+0

ええ、質問をする前に変更しました。私が知りたいのは、定義済みのラッパークラス 'String'を、エラーメッセージの推奨に従って、プリミティブ' string'型よりも好ましいものにするものです。 –

+0

解決策を見つけましたか?私は同じ問題に直面しています。 –

答えて

4
private searchTerms = new Subject<String>(); 

private searchTerms = new Subject<string>(); 

Stringに変化はclassstringdatatypeです。

+0

ええ、私は知っています。 Typescriptライブラリクラス 'String'とタイプ文字データ型' string'の違いは何ですか?エラーメッセージごとに可能なすべてのインスタンスで、クラスに対してデータ型を使用する必要があります。私の質問。 –

+0

'Subject'メソッド/ APIは後でデータを出力します。 'Subject ()'はどのタイプのデータが放出されるかを指示します。一般的に、subjectは 'string type'データを出すことができ、明らかに' String class'型データを出力することはできません。だから... – micronyks

+0

ラッパークラスの余分なデータはきれいにインターフェイスしないので、一般的にはStringラッパークラスを使用することをお勧めします(またはおそらくラッパークラスをインターフェイスに「作成」できるかどうか疑問ですが、それは別です...)Subject API?おそらく、絶対に必要でない限り、ラッパークラスを使用して複雑さを追加しないというより一般的なルールがあります。サブジェクトメソッドの問題は、1つのラッパークラスの1つの例です(Subjectもラッパークラスですか?)ラッパーによって追加された複雑さのために? –

関連する問題