Una class GUID TypeScript?

Qualcuno sa di una buona, solida, implementazione di C # come GUID (UUID) in TypeScript?

Potrei farlo da solo, ma ho pensato che avrei risparmiato il mio tempo se qualcun altro l’avesse fatto prima.

Esiste un’implementazione nei miei programmi di utilità TypeScript basati sui generatori GUID JavaScript.

Ecco il codice:

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); } 

Si prega di notare quanto segue:

I GUID C # sono garantiti come unici. È molto probabile che questa soluzione sia unica. C'è un enorme divario tra "molto probabile" e "garantito" e non si vuole cadere attraverso questa lacuna.

I GUID generati da JavaScript sono ottimi da utilizzare come una chiave temporanea che si utilizza in attesa che un server risponda, ma non mi fiderei necessariamente di loro come chiave primaria in un database. Se hai intenzione di fare affidamento su un GUID generato da JavaScript, sarei tentato di controllare un registro ogni volta che viene creato un GUID per assicurarti di non avere un duplicato (un problema che è emerso nel browser Chrome in alcuni casi ).

Ho trovato questo https://typescriptbcl.codeplex.com/SourceControl/latest

ecco la versione di guida che hanno nel caso in cui il collegamento non funzioni in seguito.

 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); } } }