【发布时间】:2018-07-03 06:03:45
【问题描述】:
我正在对从服务器发送到我的 Angular 应用程序的打字稿中的数据进行建模。 Opportunity 有一个 forms 属性,其中包含一个 Form[] 对象数组。 Form 有一个parent 属性,其中可能包含一个Opportunity。为了解析类型,定义Opportunity的文件导入Form,定义Form的文件导入Opportunity。这会产生循环依赖警告。
我发现了几个处理循环依赖关系的先前 SO 问题(here、here),但在每种情况下,它们都在处理 javascript 代码中的循环依赖关系。这种情况下,循环依赖只针对typescript类型,编译后不存在。有没有办法在文件中包含一个类型,同时避免这种循环依赖问题?到目前为止,我还没有找到任何东西。
我能想到两个解决这个问题的办法:
- 在同一个文件中定义两个模型
- 在
Opportunity文件中重新创建Form接口/在Form文件中创建Opportunity接口。
还有其他/更好的解决方案吗?谢谢!
更新 2
我似乎找到了an answer(由于某种原因,它在问题列表中的位置非常靠后)。这个答案提出了两种可能性
-
创建一个单独的定义文件(这似乎涉及重新创建
Opportunity和Form类接口,因此不会比上面的选项#2 更好)。 -
使用导入,这是我已经在做的(并且导致循环依赖警告)。
有没有办法只导入一个类的关联接口?
更新 3
需要明确的是,目前Opportunity 和Form 看起来像这样:
// opportunity.ts
import { Form } from '....../form'
export class Opportunity {
public forms: Form[] = [];
}
// form.ts
import { Opportunity } from '....../opportunity'
export class Form {
public parent: Opportunity;
}
【问题讨论】:
-
您可以在
form.ts文件中声明一个类declare class Opportunity {},TypeScript 将假定该类是一个外部类并且在运行时可用。您可以跳过其中一堂课的导入。 -
@AkashKava 谢谢!!我可以接受这个答案,也许这是最好的解决方案。虽然它不是完美,因为以这种方式声明类会从我的IDE(VS Code)中删除各种自动完成选项。我假设是因为 IDE 不再对声明的类一无所知。为了夺回自动补全能力,唯一的办法是手动重新定义界面吗?
标签: angular typescript