检测到的不相关函数之间的循环依赖性

问题描述 投票:0回答:1

我在Angular应用程序中遇到循环依赖检测到的警告,它使用了从两个实用程序文件中单独导出的函数。我将在下面显示两个文件的简化示例。

第一个文件:

// type-helper.ts
import {getPropertyIfExists} from "./helper";

export function isType(item: any, type: string, property?: string) {
  const target = getPropertyIfExists(item, property);
  if (typeof type !== "string") return false;
  else return typeof target === type;
}

export function isArray(item: any[] | any): item is any[] {
  return item && Array.isArray(item);
}

export function isObject(item: object | any): item is object {
  return item && typeof item === 'object';
}

第二个文件:

// helper.ts
import {isArray, isObject} from "./helper";

export function getPropertyIfExists(item: any, property?: string): any {
  if (property) return item[property];
  else return item;
}

export function removeUndefinedProperties<T>(obj: T): T {
  const keys = Object.keys(obj);
  for (const key of keys) {
    if (isArray(obj[key])) obj[key] = removeEmptyValuesFromArray(obj[key]);
    else if (isObject(obj[key])) obj[key] = removeUndefinedProperties(obj[key]);
    else if (item === undefined || item === null) delete obj[key];
  }
  return obj;
}

这两个文件都提供了我喜欢在我的应用程序中重用的小型实用程序,而不必链接到单个服务。据我所知,这些文件之间没有其他链接。

所以,我的问题:

  1. 警告是预期的行为吗?如果您在组件和服务之间存在循环依赖关系,并且整个类都在其中导入,则我理解该警告,但是在这种情况下,实际导入的项目之间没有循环依赖关系。
  2. 如果这不是问题,是否有办法针对这种特定情况使警告消失(无需从其他循环依赖项中删除警告)?

谢谢!

angular typescript circular-dependency
1个回答
0
投票
您不能导入桶形模块本身。因为会出现循环依赖。 (将进行无限循环的导入)

index.ts type-helper.ts helper.ts helper.ts -> index.ts -> type-helper.ts -> helper.ts -> index.ts -> type-helper.ts -> helper.ts

为了避免这种情况,您需要导入确切的补丁程序

// helper.ts
// import {isArray, isObject} from "./helper";
import {isArray, isObject} from "./helper/type-helper";

export function getPropertyIfExists(item: any, property?: string): any {
  if (property) return item[property];
  else return item;
}

export function removeUndefinedProperties<T>(obj: T): T {
  const keys = Object.keys(obj);
  for (const key of keys) {
    if (isArray(obj[key])) obj[key] = removeEmptyValuesFromArray(obj[key]);
    else if (isObject(obj[key])) obj[key] = removeUndefinedProperties(obj[key]);
    else if (item === undefined || item === null) delete obj[key];
  }
  return obj;
}

您可能有helper.ts而不是index.ts

© www.soinside.com 2019 - 2024. All rights reserved.