3

Error: Type 'string | null' is not assignable to type 'string'. Type 'null' is not assignable to type 'string'. Error : Type '{ id?: string | undefined; title?: string | undefined; content?: string | undefined; }' is not assignable to type 'Post'. Types of property 'id' are incompatible. Type 'string | undefined' is not assignable to type 'string'. Type 'undefined' is not assignable to type 'string'.

export interface Post{
    id:string;
    title:string;
    content:string;
}
import { Component,OnInit} from '@angular/core';
import { NgForm } from '@angular/forms';
import { ActivatedRoute, ParamMap } from '@angular/router';
import { Post } from '../post.model';

import { PostsService } from '../posts.service';

@Component({
  selector: 'app-post-create',
  templateUrl: './post-create.component.html',
  styleUrls: ['./post-create.component.css']
})
export class PostCreateComponent implements OnInit {

// newPost='No Content'
enteredTitle='' 
  enteredContent=''
private mode='create'
private postId:string 
private post:Post
  // postId: string | null | undefined;

constructor(public postsService:PostsService
  ,public route: ActivatedRoute){}

ngOnInit(){
  this.route.paramMap.subscribe((paramMap:ParamMap)=>{
    if(paramMap.has('postId')){
      this.mode='edit'
      this.postId=paramMap.get('postId')
      this.post=this.postsService.getPost(this.postId)
    }else{
      this.mode='create'
      this.postId="null";
    }
  });
}

onAddPost(form:NgForm){ 
  if(form.invalid)
  {
    return
  } 
  console.log((form.value.title,form.value.content));
  this.postsService.addPost(form.value.title,form.value.content)

form.resetForm();

}
}
5
  • Maybe try private postId: string = '' Commented Mar 15, 2021 at 11:19
  • Dou you need this, this.postId="null"; , cant you change it to =""; Commented Mar 15, 2021 at 11:22
  • @Grumpy this.postId=''null" can be changed tothis.postId="" but problem is on this.postId=paramMap.get('postId') this.post=this.postsService.getPost(this.postId) Commented Mar 15, 2021 at 11:25
  • @Emilien No, thats not a solution Commented Mar 15, 2021 at 11:28
  • 1
    You need to check if(postId) before using it Commented Mar 15, 2021 at 11:38

2 Answers 2

6

paramMap.get() returns string|null. Since your variable is strictly of type string, TS is showing the error.
You could either change the type of postId to string|null.
Or do something like this this.postId=paramMap.get('postId') || '';

Sign up to request clarification or add additional context in comments.

2 Comments

I am getting this error on your solution : Type 'String' is not assignable to type 'string'. 'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible.
Can you check the type of postId ? It might be "String" (Wrapper Object). It should be "string" (primitive)
-1

I think paramMap returns a boolean..you need a string. "Returns boolean: True if the map contains the given parameter, false otherwise."

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.