github.com/Microsoft/TypeScript/wiki/...

я есть проект dotnetcore 20 и angular4, в котором я пытаюсь создать службу пользователя и доставить пользователя к своему домашнему компоненту. Бэкэнд работает просто отлично, а сервис - нет. Проблема наLocalStorage, Сообщение об ошибке, которое у меня есть:

Аргумент типа 'строка | null 'нельзя назначить параметру типа' string '. Тип 'null' нельзя назначить типу 'string'.

И мой пользовательский сервис

import { User } from './../models/users';
import { AppConfig } from './../../app.config';
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, Response } from '@angular/http';



@Injectable()
export class UserService {
constructor(private http: Http, private config: AppConfig) { }

getAll() {
    return this.http.get(this.config.apiUrl + '/users', this.jwt()).map((response: Response) => response.json());
}

getById(_id: string) {
    return this.http.get(this.config.apiUrl + '/users/' + _id, this.jwt()).map((response: Response) => response.json());
}

create(user: User) {
    return this.http.post(this.config.apiUrl + '/users/register', user, this.jwt());
}

update(user: User) {
    return this.http.put(this.config.apiUrl + '/users/' + user.id, user, this.jwt());
}

delete(_id: string) {
    return this.http.delete(this.config.apiUrl + '/users/' + _id, this.jwt());
}

// private helper methods

private jwt() {
    // create authorization header with jwt token
    let currentUser = JSON.parse(localStorage.getItem('currentUser'));
    if (currentUser && currentUser.token) {
        let headers = new Headers({ 'Authorization': 'Bearer ' + currentUser.token });
        return new RequestOptions({ headers: headers });
    }
}

И мой home.component.ts

import { UserService } from './../services/user.service';
import { User } from './../models/users';
import { Component, OnInit } from '@angular/core';

@Component({
moduleId: module.id,
templateUrl: 'home.component.html'
})

export class HomeComponent implements OnInit {
currentUser: User;
users: User[] = [];

constructor(private userService: UserService) {
   this.currentUser = JSON.parse(localStorage.getItem('currentUser'));
}

ngOnInit() {
   this.loadAllUsers();
}

deleteUser(_id: string) {
   this.userService.delete(_id).subscribe(() => { this.loadAllUsers() });
}

private loadAllUsers() {
   this.userService.getAll().subscribe(users => { this.users = users; });
}

Ошибка включенаJSON.parse(localStorage.getItem('currentUser'));

 Carcigenicate24 окт. 2017 г., 17:56
Разве вы не должны заканчивать тип с? сказать, что это обнуляемо? Я не уверен, где вы указываете тип строки.
 GoGo24 окт. 2017 г., 18:11
В этом случае я даже не знаю, какой из них равен нулю, а какой является строкой. Ошибка на локальном хранилище. Он просто не получает пользователя из localStorage.

Ответы на вопрос(2)

Решение Вопроса

localStorage.getItem() может вернуть либо строку, либоnull. JSON.parse() требуется строка, поэтому вы должны проверить результатlocalStorage.getItem() прежде чем пытаться использовать его.

Например:

this.currentUser = JSON.parse(localStorage.getItem('currentUser') || '{}');

или возможно:

const userJson = localStorage.getItem('currentUser');
this.currentUser = userJson !== null ? JSON.parse(userJson) : new User();
 Leon Gaban15 февр. 2019 г., 19:40
На самом деле, извините, первый пример, который вы опубликовали, второй - нет :)this.currentUser = JSON.parse(localStorage.getItem('currentUser') || '{}');
 Leon Gaban15 февр. 2019 г., 19:38
Здравствуй! Спасибо за этот ответ, это имеет смысл, но я попробовал это здесь, но все еще сталкиваюсь с той же самой ошибкой, обратите внимание, посмотрите? :)stackoverflow.com/questions/54715260/...

просто хочется добавить более новый и короткий ответ.

this.currentUser = JSON.parse(localStorage.getItem('currentUser')!);
 Dale Burrell01 янв. 2019 г., 03:58

Ваш ответ на вопрос