web-dev-qa-db-fra.com

L'argument de type 'Date' n'est pas attribuable au paramètre de type 'chaîne'

Je travaille sur le projet Angular2-Meteor et j'obtiens ceci

L'argument de type "Date" n'est pas attribuable au paramètre de type "chaîne".

erreur lorsque j'ai écrit cette fonction pour définir la valeur de la date.

start: startOfDay(new Date(attendance.dayAt)),

J'ai essayé de définir le type comme Date mais ne fonctionnera pas comment puis-je résoudre cette erreur?

10
Habib

J'avais un problème similaire.

Après des recherches, j'ai trouvé trois liens utiles:

La variable date fonctionne, mais les fonctions ne fonctionnent pas

Conversion de chaîne en problème de date

Argument non valide 'format de date' pour le canal 'DatePipe'?

J'ai ensuite déclaré ma variable comme type Date dans le composant "classe d'exportation" comme ceci:

start: Date

puis plus tard dans une fonction, je l'ai utilisé comme ceci pour remplir la variable date:

start = new Date(Date.now());

À en juger par l'erreur que vous recevez, je suppose que votre fonction "startOfDay ()" renvoie une chaîne, vous devrez donc modifier votre code comme suit.

start: new Date(startOfDay(new Date(attendance.dayAt)))

la raison en est que si "start" est une date, vous devez utiliser la fonction new Date () pour lui attribuer une date. La date prend ensuite une chaîne en entrée et renvoie une date et l'affecte à la variable "start". J'espère que cela t'aides :)

9
Egon Allison

J'ai une situation où une valeur de date est renvoyée d'un service Web sous forme de chaîne JSON et une date est castée dans une propriété de type Date dans TypeScript. Cela provoque l'affichage de l'erreur 'Type' chaîne 'au type' Date '' pendant la compilation.

Une solution de contournement que j'ai trouvée consiste à définir la propriété côté client comme "tout" type (au lieu de: Date). Cela permet à JSON de bien intégrer une date et aucune erreur ne s'affiche pendant la compilation.

0
iDubrovinsky

si vous récupérez une date sous forme de chaîne à partir d'une API, vous devez convertir votre champ de date angular:

getUser(id: number): Observable<User> {
    return this.http.get<User>(this.baseUrl + 'users/' + id.toString())
    .pipe(
      map( user => {
        user.lastActive = new Date(user.lastActive);
        return user;
      })
    );
  }