Joh*_*ohn 6 typescript angular
我正在对从服务器发送到我的 Angular 应用程序的打字稿中的数据进行建模。AnOpportunity具有forms包含Form[]对象数组的属性。AForm有一个parent属性,其中可能包含一个Opportunity。为了解决这个类型,它定义文件Opportunity导入Form和定义文件Form导入Opportunity。这会创建一个循环依赖警告。
我发现了几个处理循环依赖的先前 SO 问题(这里,这里),但在每种情况下,它们都在处理 javascript 代码中的循环依赖。在这种情况下,循环依赖只与 typescript 类型有关,编译后将不存在。有没有办法在文件中包含一个类型,同时避免这种循环依赖问题?到目前为止,我还没有发现任何东西。
对于这个问题,我可以想到两种解决方案:
Form的接口Opportunity文件/中Opportunity的接口Form文件。还有其他/更好的解决方案吗?谢谢!
我似乎找到了答案(出于某种原因,它在问题列表中的位置真的很靠后)。这个答案提出了两种可能性
创建一个单独的定义文件(这似乎涉及重新创建Opportunity和Form类接口,因此不会比上面的选项 #2 更好)。
使用导入,这是我已经在做的(并且导致循环依赖警告)。
有没有办法导入刚才一类的相关接口?
只是要清楚,目前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;
}
Run Code Online (Sandbox Code Playgroud)
moz*_*ozu 12
从打字稿版本 3.8 开始
import type会帮助你的。
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html
您可以在form.ts文件中声明一个类declare class Opportunity {},TypeScript将假定该类是外部类并且在运行时可用。您可以在其中一类中跳过导入。
这里唯一的痛苦是,您必须声明您将使用的方法,例如,
declare class Opportunity {
method1(): void;
method2(): number;
}
Run Code Online (Sandbox Code Playgroud)
该类将用作简单声明,不需要方法体。并且 VS 智能感知将正常工作。