IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

TypeScript Discussion :

Quel type je dois donner au json ?


Sujet :

TypeScript

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut Quel type je dois donner au json ?
    Bonjour je crée un array de json:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    //test.ts
    var all= [];
     
    var user = {};
     
    user.active ="true";
    user.value = "sk@msn.fr";
    all.push(user);
     
    var user = {};
    user.active ="true";
    user.value = "fb@msn.fr";
    all.push(user);
     
    console.log(all);
    le code fonctionne mais j'ai des erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    t.ts(44,6): error TS2339: Property 'active' does not exist on type '{}'.
    t.ts(45,6): error TS2339: Property 'value' does not exist on type '{}'.
    t.ts(49,6): error TS2339: Property 'active' does not exist on type '{}'.
    t.ts(50,6): error TS2339: Property 'value' does not exist on type '{}'.
    comment je doit typé active et value ?

    merci de vos réponse

  2. #2
    Membre éclairé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2009
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2009
    Messages : 966
    Par défaut
    plusieurs possibilité


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    interface IUser{
        active : string;
        value : string;
        }
     
    var user : IUser;
    user.active ="true";
    user.value = "sk@msn.fr";
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    var user : any ;
     
    user.active ="true";
    user.value = "sk@msn.fr";
    mais il vaux mieux privilégier la première solution.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    merci de ta réponse

    j'essaye de coder avec un objet (j'ai décider de plutôt ranger mes json dans un array pour les insérers dans bdd table):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class Social{
        private social: string = [];
     
        public addSocial(json)
        {
            console.log("=>"+json);
            this.user.push(json);
     
        }
     
        public getSocial()
        {
            return this.user;
        }
    }
     
    interface IUser{
        active : string;
        value : string;
    }
     
    add_user = new Social();
     
    var user = {};
    user.active ="true";
    user.value = "sk@msn.fr";
    add_user.addSocial(user);
     
    var user = {};
    user.active ="true";
    user.value = "dk@msn.fr";
    add_user.addSocial(user);
     
    var user = {};
    user.active ="true";
    user.value = "s=k@skyp.fr";
    add_user.addSocial(user);
     
    console.log(JSON.stringify(add_user.getSocial()));
    je n'arrive pas à insérer mes JSON

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    =>[object Object]
     
            this.user.push(json); //erreur
    sinon j'ai aussi essayer cette solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    class Social{
        private social:<IUser>= [];
     
     error TS2322: Type 'undefined[]' is not assignable to type 'string'.

  4. #4
    Membre éclairé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2009
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2009
    Messages : 966
    Par défaut
    Normal,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class Social{
        private social:<IUser>= [];
    tu essaye de mettre a array d'any dans un objet IUser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Social{
        private social:Array<IUser>= new Array<IUser>();
    }
    Puis pour passer ton object en Json
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var MonObjSocial = new Social();
    ...
    JSON.parse(MonObjSocial);
    Pour ma part j'ai tendance a créer un object BaseObject dans lequel je rajoute mes fonction de base tel que la sérialisation en JSON et que je fais hériter a tous mes object data.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    j'ai essayer d'appliquer ce que tu m'a dis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    class Social implements IUser{
     
     private social:Array<IUser>= new Array<IUser>();
        constructor (public active: string, public active: string) 
        {
     
        }
     
     
    }
     
    class interface IUser
    {
        active : string;
        value : string;
    }
     
     
     
    var user : new IUser;
    user.active ="true";
    user.value = "sk@msn.fr";
     
    var MonObjSocial = new Social(user);
    Nom : err.jpg
Affichages : 329
Taille : 55,5 Ko


    l IDE n'as l'air d'aimer le <Iuser>() ...

    et il y a un erreur il ne vois pas la class IUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ReferenceError: IUser is not defined

  6. #6
    Membre éclairé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2009
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2009
    Messages : 966
    Par défaut
    je ne comprend absolument pas ton code.

    bon voila se que je ferrai si je devais refaire ton code comme je l'ai compris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    class Social  {
     
        public ListUser : Array<IUser> = new Array<IUser>();
     
        constructor() {
        }
     
    }
     
    interface IUser {
    	Active : boolean
    	Value : string
    }
     
     
    var lUser : IUser;
    lUser.Active = true;
    lUser.Value = "sk@msn.fr";
     
    var MonObjSocial = new Social();
    MonObjSocial.ListUser.push(lUser);
    Je ne comprend pas pourquoi, tu veux implémenter l'interface IUser dans ta classe Social ?

    peut tu m'expliquer plus clairement se que tu souhaite faire ?

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    merci d'avoir refait le code, je l'ai essayé telle quel mais il y a erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /home/c9/test/t.js:8
    lUser.Active = true;
                 ^
     
    TypeError: Cannot set property 'Active' of undefined
        at Object.<anonymous> (/home/c9/test/t.js:8:14)
        at Module._compile (module.js:409:26)
        at Object.Module._extensions..js (module.js:416:10)
        at Module.load (module.js:343:32)
        at Function.Module._load (module.js:300:12)
        at Function.Module.runMain (module.js:441:10)
        at startup (node.js:139:18)
        at node.js:968:3
    la compilation en tsc ne mets pas d'erreur ...


    Voici ce que je veux faire,
    je fait un formulaire (en single page)qui demande des adresse email,téléphone..., on peut en ajouter tant qu'on veut en cliquant sur un bouton "+".
    Mais il faut valider un seul formulaire,après le bouton + un autre même formulaire se présente(exemple, je met mon email je clique sur + puis je met mon téléphone je clique sur + ... à la fin je valide )
    chaque fois qu'on met des données social, on le garde dans une session, la session c'est
    un tableau de json, quand on clique sur terminé. Et on sauvegarde le tout dans une bdd en type jsonb.

    j'essaye de faire une classe social qui permet de charger ces adresse, et dans le futur ajouter des méthodes qui
    puisse modifier la donnée json comme désactiver son contacte (donc la classe Social aura une méthode pour faire activate = "false"), ou fouiller dedans.Mai pour le moment j'en suis à trouvé une classe qui charge ces JSON dans une table.

    J'espère que mon explication tiens la route ...
    Je travail sur du typescript car je vais utilisé de l' Angular2 RC

  8. #8
    Membre éclairé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2009
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2009
    Messages : 966
    Par défaut
    au pire tu peu faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    class Social  {
     
        public ListUser : Array<User> = new Array<User>();
     
        constructor() {
        }
     
    }
     
    classe User {
    	public Active : boolean
    	public  Value : string
     
            constructor() {
        }
    }
     
     
    var lUser = new User();
    lUser.Active = true;
    lUser.Value = "sk@msn.fr";
     
    var MonObjSocial = new Social();
    MonObjSocial.ListUser.push(lUser);
    Je t'invite a revoir les notion de classe, interface et héritage ainsi que de typage afin d'utiliser TypeScript a sont plein potentiel.

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    merci ce n'est pas évident j' suis arrivé.

    maintenant j'essaye de parcourir un JSON avec JSON.parse, je rentre le nom et l'email, et mon but est de charger
    le nom dans l'attribut nom et l'email dans l'attribut mail le json est "new_count".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
        public selfEnrol(new_count){ //en paramètre '{"username":"toto","email":"teot@to.fr"}'
          //  console.log(JSON.parse(new_count));
     
        JSON.parse(new_count,function(k,v){
     
            switch(k) //on voit que c'est username
            {
                case'username':
                    console.log(v);//affiche toto
                   this.username(v);//refuse d'enregistrer v dans username
     
            };
     
         });
     
        }
    si je fais de console log, j'arrive à voir que k est le username et l'email
    et que v est le nom toto et le contenu de l'email

    A t'on le droit à l'intérieur du parse de faire un switch + un appelle d'une méthode ?
    car j'ai cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TypeError: this.username is not a function
    peut être que c'est pas possible de le faire comme ça mais que je suis obligé d'enregistrer le nom et email dans une tableau et par la suite
    extraire cette table pour y insérer mes attributs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    class User{
     
        private create;//date creation timestamp
       private username:string;
        private emai:stringl; //email principal
     
        private id_hash:string; //generer automatiquement après validation username + firstnam + lastname
     
     
        private firstname:string;
        private lastname:string;
     
     
        private password;
        private auth;//cas,manuel,ldap
     
        private adresse; //json
        private appartenance; //json institution, departement
     
        private social: Array<string> = []; //json
        private fieldData;
     
        public getEmail()
        {
            return this.email;
        }
     
        public getUsername()
        {
            return this.username;
        }
     
        public setUsername(username)
        {
            this.username = username;
     
        }
        public selfEnrol(new_count){ //s'inscrire post username + email json
          //  console.log(JSON.parse(new_count));
     
        JSON.parse(new_count,function(k,v){
     
            switch(k) //on voit que c'est username
            {
                case'username':
                    console.log(v);
                   this.setUsername(v);//on voit que c'est le contenu du username
     
            };
     
         });
     
        }
     
        public crypt(secret:string)
        {
            var cryp = new Cryptage(secret);
            console.log(cryp.getSha());  
        }
     
        public setSocial(social)
        {
            this.social = (social);
        }
     
        public getSocial()
        {
        return this.social;
        }
     
        public getFieldData()
        {
            //case de tout les  champs demandé
        }
    }
     
     
    var user = new User();
     
    //user.setSocial([ { email: 't@t' }, { email: '5@t' } ]);
     
     
    user.selfEnrol('{"username":"toto","email":"teot@to.fr"}');
    console.log(user.getUsername());

  10. #10
    Membre éclairé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2009
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2009
    Messages : 966
    Par défaut



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: this.username is not a function
    l'erreur parle d'elle même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.username = "blblbla"
    Merci de mettre en résolu (et de réfléchir un peu par soit même...).

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    ok (j'ai fait un mauvais copier coller), je vais faire une autre poste pour ce problème ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/07/2015, 19h34
  2. Quel type de stockage de données dois-je utiliser ?
    Par Largo13 dans le forum Android
    Réponses: 9
    Dernier message: 03/08/2012, 10h42
  3. Quels types de projets réalisez vous avec .NET
    Par Louis-Guillaume Morand dans le forum Général Dotnet
    Réponses: 106
    Dernier message: 03/12/2007, 18h44
  4. Quel type de projet choisir pour incorporer directX9...
    Par Coderm@n dans le forum DirectX
    Réponses: 6
    Dernier message: 02/08/2004, 13h24
  5. Quel type de BDD dans mon cas
    Par zoubidaman dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 10/06/2004, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo