在打字稿中将类用作类型时如何解决循环依赖关系?

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

我如何使用不会遇到循环依赖项错误的打字稿键入?

似乎发生循环依赖性错误,即使在代码编译为有效JS时应删除导入。那是个错误吗?

user-model.ts

import { Post } from '../post-model'

export class User {
  Posts: Post[];
}

post-model.ts

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中工作

感谢您提前提供帮助!

typescript typescript-typings circular-dependency type-graphql
2个回答
0
投票

使用界面是这里的最佳选择。您可以为每个文件创建一个.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[];
}

0
投票

只有将它们放在同一文件中才能执行此操作

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.