我如何使用不会遇到循环依赖项错误的打字稿键入?
似乎发生循环依赖性错误,即使在代码编译为有效JS时应删除导入。那是个错误吗?
import { Post } from '../post-model'
export class User {
Posts: Post[];
}
import { User } from '../user-model'
export class Post {
User: User;
}
我听说过两种可能都不令人满意的解决方案。
一个是,创建一个与该类匹配的新接口:Circular dependency caused by importing typescript type
而且我已经阅读了typegraphql的文档:https://typegraphql.com/docs/types-and-fields.html
他们说:
为什么使用函数语法而不是简单的{type:Rate}配置对象?因为通过使用函数语法我们解决了循环依赖的问题(例如Post User),因此将其作为惯例使用。如果要保存一些击键,则可以使用速记语法@Field(()=> Rate),但对于其他击键来说可能不太可读。
我也没有找到任何选项来禁用打字稿中的循环依赖警告。
我正在Nrwl / Angular 9.x中工作
感谢您提前提供帮助!
使用界面是这里的最佳选择。您可以为每个文件创建一个.d.ts
,然后导入该文件。
user.d.ts
export interface IUser {
Posts: IPost[];
}
post.d.ts
export interface IPost {
User: IUser;
}
然后...
import { IPost, IUser } from './post.d'
export class User implements IUser {
Posts: IPost[];
}
只有将它们放在同一文件中才能执行此操作
export class User {
Posts: Post[];
}
export class Post {
User: User;
}
或者如果您写它们的类型,则>]
user-post.types.ts
export interface User { Posts: Post[]; } export interface Post { User: User; }
user-model.ts
import { Post } from '../user-post.types' export class User { Posts: Post[]; }
post-model.ts
import { User } from '../user-post.types'
export class Post {
User: User;
}