У меня есть следующий код, который я использую для создания системы управления казино:Angular2/Машинопись: ошибка TS2345: Аргумент типа «String» не может быть назначен для параметра типа «строка»
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);
}
}
Однако, когда я пытаюсь transpile этого кода из транскрипта JavaScript Я получаю эту ошибку:
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.
Теперь, я исправил ошибку, просто изменив String
к string
в фигурных скобках угла, но я хочу, чтобы иметь возможность в будущем, не создавая подобных ошибок, и lso, чтобы написать лучший код, который я могу ... Поэтому мне интересно, может ли кто-то очистить это для меня:
Я думаю, что я понимаю, что параметр с классом-оболочкой является тем, что инкапсулирует примитивный класс и предоставляет некоторые (добавьте меня, если я ошибаюсь), и я понимаю, почему тогда было бы невозможно назначить содержимое того, что по существу является более широким объявленным типом переменной, более простой примитив, там является еще одним аспектом сообщения об ошибке, которое меня интересует, то есть:
Почему было бы предпочтительнее использовать тип 'string' над типом 'String' в Angular2/Typcript в таком общем смысле, как кажется, что ошибка? Что делает этот преференциальный?
попытайтесь изменить его на 'new Subject(); «small s» ' –
micronyks
Да, я изменил его, прежде чем задал вопрос. Однако я хотел бы знать, что делает предопределенный класс-оболочку 'String' предпочтительнее примитивного типа' string', в соответствии с рекомендацией в сообщении об ошибке. –
Вы нашли решение? Я столкнулся с той же проблемой. –