Search code examples
typescriptuuidguid

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.


Solution

  • 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).