code: function (id, traversePath) {
        var datatype = this.ds.find(function (dt) {
          return dt.id == id;
        });
        if (datatype.format != 0 && datatype.format != 2 || datatype.id === 10000) {
          // 非哈希、非数组、可变类型时不会有循环依赖产生
          return;
        }
        var foundLoop = traversePath.find(function (item) {
          // todo: 这里不使用严格相等判断, 因为后端返回的数据类型有时是字符有时是数字
          return item.id == id;
        });
        if (foundLoop) {
          // 如果存在环, 就返回数据类型的名称
          // console.log(traversePath)
          // console.log(foundLoop.name)
          return '<' + foundLoop.name + '>';
        } else {
          traversePath.push({
            id: id,
            name: datatype.name
          });
        }
      }
docs: 检测是否存在环
  @param {Number} id - 要检测的id
  @param {Array} traversePath - 遍历时存的路径
  @return {String|undefined}  - 存在环时返回环的名称, 否则返回 undefined