替代uuid创建中的按位运算符

时间:2016-12-19 13:44:41

标签: javascript typescript uuid lint tslint

我正在使用以下typescript方法生成<?php // Set up a local variable. $columns= array(); // Collect the data. while (have_posts) { the_post(); $columns[$col] .= '<div class=col-' . $col . '>' . get_template_part( 'template-parts/content', 'three-columns' ) . '</div>'; } // Output the data. foreach($columns as $col => $data) { echo '<div class="column-' . $col . '-wrapper">' . $data . '</div>'; } s。代码本身基本上是这个stackoverflow answer的打字稿版本。

UUID

我们的开发团队使用generateUUID(): string { let date = new Date().getTime(); if (window.performance && typeof window.performance.now === 'function') { date += performance.now(); } let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { let r = (date + Math.random() * 16) % 16 | 0; date = Math.floor(date / 16); return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); }); return uuid; }; 来保持代码清洁,并且我们有一条禁止使用TSLint的规则。我不知道如何在不损害UUID生成器的加密方面的情况下重写此代码。如何重写这段代码或者这根本没有意义呢?

2 个答案:

答案 0 :(得分:12)

TSLint强调这一点的原因是因为偶然使用了按位运算符(例如,在if语句中)而不是故意使用它。

告诉TSLint您真的意味着使用按位运算符应该是完全可以接受的。只需将它们包装在特殊的TSLint注释中即可。 :

/* tslint:disable:no-bitwise */

// Your code...

/* tslint:enable:no-bitwise */

答案 1 :(得分:1)

export abstract class SystemGuid{
    constructor() {
      // no-op
    }
    public static UUID(): string {
      if (typeof window !== 'undefined' && typeof window.crypto !== 'undefined' 
      && typeof window.crypto.getRandomValues !== 'undefined') {
        const buf: Uint16Array = new Uint16Array(8);
        window.crypto.getRandomValues(buf);
        return (
          this.pad4(buf[0]) +
          this.pad4(buf[1]) +
          '-' +
          this.pad4(buf[2]) +
          '-' +
          this.pad4(buf[3]) +
          '-' +
          this.pad4(buf[4]) +
          '-' +
          this.pad4(buf[5]) +
          this.pad4(buf[6]) +
          this.pad4(buf[7])
        );
      } else {
        return (
          this.random4() +
          this.random4() +
          '-' +
          this.random4() +
          '-' +
          this.random4() +
          '-' +
          this.random4() +
          '-' +
          this.random4() +
          this.random4() +
          this.random4()
        );
      }
    }
    private static pad4(num: number): string {
      let ret: string = num.toString(16);
      while (ret.length < 4) {
        ret = '0' + ret;
      }
      return ret;
    }
    private static random4(): string {
      return Math.floor((1 + Math.random()) * 0x10000)
        .toString(16)
        .substring(1);
    }
    public static generate(): string {
      return SystemGuid.UUID();
    }
   }