web-dev-qa-db-fra.com

Un TypeScript GUID class?

Est-ce que quelqu'un connaît une bonne et solide implémentation de C # comme GUID (UUID) dans TypeScript?

Je pouvais le faire moi-même, mais je pensais que je gagnerais du temps si quelqu'un d'autre le faisait avant.

52
Gustav

Il existe une implémentation dans my tilitaires TypeScript basée sur des générateurs JavaScript GUID).

Voici le code:

class Guid {
  static newGuid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      var r = Math.random() * 16 | 0,
        v = c == 'x' ? r : (r & 0x3 | 0x8);
      return v.toString(16);
    });
  }
}

// Example of a bunch of GUIDs
for (var i = 0; i < 100; i++) {
  var id = Guid.newGuid();
  console.log(id);
}

Veuillez noter les points suivants:

Les GUID C # sont uniques. Cette solution est très probablement unique. Il y a un énorme fossé entre "très probable" et "garanti" et vous ne voulez pas passer à travers cet écart.

Les GUID générés par JavaScript sont intéressants à utiliser comme clé temporaire que vous utilisez lorsque vous attendez qu'un serveur réponde, mais je ne leur ferais pas nécessairement confiance en tant que clé primaire dans une base de données. Si vous comptez utiliser un GUID généré par JavaScript, je serais tenté de vérifier un registre chaque fois qu'un GUID est créé pour vous assurer que vous n'avez pas de doublon (un problème qui a déjà été résolu.) apparaître dans le Chrome dans certains cas).

116
Fenton

J'ai trouvé ceci https://typescriptbcl.codeplex.com/SourceControl/latest

voici la version Guid ils ont au cas où le lien ne fonctionne pas plus tard.

module System {
    export class Guid {
        constructor (public guid: string) {
            this._guid = guid;
        }

        private _guid: string;

        public ToString(): string {
            return this.guid;
        }

        // Static member
        static MakeNew(): Guid {
            var result: string;
            var i: string;
            var j: number;

            result = "";
            for (j = 0; j < 32; j++) {
                if (j == 8 || j == 12 || j == 16 || j == 20)
                    result = result + '-';
                i = Math.floor(Math.random() * 16).toString(16).toUpperCase();
                result = result + i;
            }
            return new Guid(result);
        }
    }
}
10
dburmeister