A TypeScript GUID class?

Does anyone know of a good, solid, implementation of C# like GUID (UUID) in TypeScript?

Could do it myself but figured I'd spare my time if someone else done it before.

147217 次浏览

Updated Answer

This is now something you can do natively in JavaScript/TypeScript with crypto.randomUUID().

Here's an example generating 20 UUIDs.

for (let i = 0; i < 20; i++) {
let id = crypto.randomUUID();
console.log(id);
}

Original Answer

There is an implementation in my TypeScript utilities based on JavaScript GUID generators.

Here is the 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 < 20; i++) {
var id = Guid.newGuid();
console.log(id);
}

Please note the following:

C# GUIDs are guaranteed to be unique. This solution is very likely to be unique. There is a huge gap between "very likely" and "guaranteed" and you don't want to fall through this gap.

JavaScript-generated GUIDs are great to use as a temporary key that you use while waiting for a server to respond, but I wouldn't necessarily trust them as the primary key in a database. If you are going to rely on a JavaScript-generated GUID, I would be tempted to check a register each time a GUID is created to ensure you haven't got a duplicate (an issue that has come up in the Chrome browser in some cases).

I found this https://typescriptbcl.codeplex.com/SourceControl/latest

here is the Guid version they have in case the link does not work later.

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