Reputation: 151
I am very beginner in typescript. I am trying to get my local storage variable auth
value. I know variable in local storage are stored as a string. So I am converting it into Boolean using JSON.parse
But I am getting error saying [Argument of type 'string | null' is not assignable to parameter of type 'string'. Type 'null' is not assignable to type 'string'].
Getting error at line: 2 where I am declaring auth
Variable
let leftmenu;
const auth:boolean = JSON.parse(localStorage.getItem('auth'));
if (auth === true) {
leftmenu = (
<React.Fragment>
<Navbar.Text>
Signed in as: <a href="#login">Mark Otto</a>
</Navbar.Text>
<Button variant="outline-success">Logout</Button>
</React.Fragment>);
} else {
leftmenu = (
<React.Fragment>
<Button variant="outline-success">Login</Button>
<Button variant="outline-success">Sign Up</Button>
</React.Fragment>
)
}
Upvotes: 1
Views: 2107
Reputation: 2720
Try something like this:
const auth: string | null = JSON.parse(localStorage.getItem('auth'));
if (auth!== null) {
if(auth=="true") {
leftmenu = (
<React.Fragment>
<Navbar.Text>
Signed in as: <a href="#login">Mark Otto</a>
</Navbar.Text>
<Button variant="outline-success">Logout</Button>
</React.Fragment>);
} else {
leftmenu = (
<React.Fragment>
<Button variant="outline-success">Login</Button>
<Button variant="outline-success">Sign Up</Button>
</React.Fragment>
)
}
}
Upvotes: 1
Reputation: 2370
Because it's possible that localStorage.getItem('auth')
will return null
, while JSON.parse
requires a string.
You will need to do a null check before parsing the variable.
cosnt authRaw: string = localStorage.getItem('auth');
if(authRaw !== null){
const auth: boolean = JSON.parse(authRaw);
}
A simpler approach is to use ??
to add a fallback value as an alternative to localStorage.getItem('auth')
const auth:boolean = JSON.parse(localStorage.getItem('auth') ?? "false");
Upvotes: 2