Ich habe den folgenden Code, der ich ein Casino-Management-System zu schaffen, bin mit:Angular2/Typoskript: error TS2345: Argument vom Typ 'String' ist zu Parameter des Typs 'string' nicht belegbare
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);
}
}
Allerdings, wenn ich diesen Code von Typoskript zu JavaScript transpile versuchen, bekomme ich diesen Fehler:
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.
Nun, ich den Fehler behoben haben einfach durch String
-string
in den Winkel Klammern zu ändern, aber ich möchte in der Lage sein in Zukunft fortfahren, ohne ähnliche Fehler zu erzeugen, und a lso, um den besten Code zu schreiben, den ich kann ... Ich frage mich, ob jemand das für mich klären könnte:
Ich denke, ich verstehe, dass ein Parameter mit einer Wrapper-Klasse etwas ist, das eine primitive Klasse kapselt und einige bereitstellt eine Art von zusätzlichem, normalerweise in Verbindung stehendem, Verhalten (korrigiere mich, wenn ich hier falsch liege) und ich sehe, warum es dann nicht möglich ist, den Inhalt eines wesentlich breiteren deklarierten Variablentyps dem einfacheren Primitiv zuzuordnen ist ein weiterer Aspekt der Fehlermeldung, die mich interessiert, das heißt:
Warum wäre es vorzuziehen, Typ "String" über Typ "String" in Angular2/Typescript in einem solchen allgemeinen Sinne zu verwenden, wie der Fehler zu implizieren scheint? Was macht das bevorzugt?
versuchen, es in 'new zu ändern Thema(); "kleines s" ' –
micronyks
Ja, ich habe es geändert, bevor ich die Frage gestellt habe. Was ich jedoch wissen wollte, ist, was die vordefinierte Wrapper-Klasse 'String' gegenüber dem primitiven' string'-Typ gemäß der Empfehlung in der Fehlermeldung bevorzugt. –
Haben Sie die Lösung gefunden? Ich stehe vor dem gleichen Problem. –