web-dev-qa-db-ja.com

TypeScript GUIDクラス?

TypeScriptのGUID(UUID)のようなC#の適切で堅実な実装を知っている人はいますか?

自分でそれを行うことはできましたが、他の誰かが以前にそれをやった場合、私は時間を割くと思いました。

52
Gustav

JavaScript GUIDジェネレーターに基づいて、私の TypeScriptユーティリティ に実装があります。

コードは次のとおりです。

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

次の点に注意してください:

C#GUIDは一意であることが保証されています。この解決策は、一意である可能性が非常に高いです。 「非常に可能性の高い」と「保証された」の間に大きなギャップがあり、このギャップを抜けたくありません。

JavaScriptで生成されたGUIDは、サーバーが応答するのを待つ間に使用する一時キーとして使用するのに最適ですが、データベースのプライマリキーとして必ずしも信頼できるとは限りません。 JavaScriptで生成されたGUIDに依存する場合は、GUIDが作成されるたびにレジスタをチェックして、重複がないことを確認したいと思います(これは、場合によってはChromeブラウザ)。

116
Fenton

私はこれを見つけました https://typescriptbcl.codeplex.com/SourceControl/latest

ここに Guidバージョン 後でリンクが機能しない場合に備えています。

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