javascript - Angular2/TypeScript: error TS2345: El argumento de tipo 'String' no se puede asignar al parámetro de tipo 'string'
Tengo el siguiente código, que estoy usando para crear un Sistema de Gestión de Casino:
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);
}
}
Sin embargo, cuando intento transpilar este código de TypeScript a JavaScript, obtengo este error:
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.
Ahora, he solucionado el error simplemente cambiando String a string dentro de los corchetes angulares, pero quiero poder continuar en el futuro sin crear errores similares, y también escribir el mejor código posible... Así que me pregunto si alguien podría aclararme esto:
Creo que entiendo que un parámetro con una clase envolvente es algo que encapsula una clase primitiva y proporciona algún tipo de comportamiento adicional, usualmente relacionado con la interfaz (corrígeme si me equivoco aquí), y veo por qué entonces podría no ser posible asignar el contenido de lo que es esencialmente un tipo de variable declarado más amplio al primitivo más simple, hay otro aspecto del mensaje de error que me interesa, que es:
¿Por qué sería preferible usar el tipo 'string' en lugar del tipo 'String' en Angular2/Typescript en un sentido tan general como parece implicar el error? ¿Qué es lo que hace que esto sea preferible?
Respuesta #1
private searchTerms = new Subject<String>();
cámbialo a
private searchTerms = new Subject<string>();
String es una clase y string es un tipo de dato.
