如何为具有大量泛型(打字稿)的类制作别名?

How to make an alias for a class that has a lot of generics (typescript)?

提问人:tjbindseil 提问时间:6/23/2023 更新时间:6/23/2023 访问量:32

问:

我正在将 socket.io 库用于打字稿。每当在代码中引用 or 类型时,都需要四个泛型参数。有关完整示例,请参阅文档,但相关部分是这样的:SocketServer

const io = new Server<
  ClientToServerEvents,
  ServerToClientEvents,
  InterServerEvents,
  SocketData
>();

套接字也是如此。

我的问题是,我如何别名这个长类型?而且,这甚至可能吗?我尝试了以下方法:

  • type关键词:
export type DWFServer = Server<ClientToServerEvents, ServerToClientEvents, InterServerEvents, SocketData>
  • interface关键词:
export interface DWFServer extends Server<ClientToServerEvents, ServerToClientEvents, InterServerEvents, SocketData> {}
  • class关键词:
export class DWFServer extends Server< ClientToServerEvents, ServerToClientEvents, InterServerEvents, SocketData > {}

在 type 和 interface 关键字的情况下,我收到以下编译错误:

TS2693: 'DWFServer' only refers to a type, but is being used as a value here.

在 class 关键字的情况下,我没有遇到编译失败,但实例化别名类时出现运行时错误:

TypeError: Class constructor Server cannot be invoked without 'new'

还值得注意的是,类型别名在另一个包中,我直接将这些类型导出到该包的index.ts文件中。

有谁知道我如何使这个别名工作?

TypeScript 泛型 socket.io 类型别名

评论

0赞 Aluan Haddad 6/23/2023
使 helper 函数。export function createServer() { return new Server<ClientToServerEvents, ServerToClientEvents, InterServerEvents, SocketData>(); }
0赞 tjbindseil 6/25/2023
这是解决该部分的好方法,但我认为我仍然需要一种方法来别名类型,因为它用于方法签名。ServerSocket
0赞 Aluan Haddad 7/7/2023
我不明白为什么,你能举个例子吗?

答: 暂无答案