在 Typescript 中,你能用不同的泛型类型实现两次相同的泛型接口吗?



我将尝试用一个例子来解释我的情况。

假设我有界面:

interface EventListener<TArgs> {
listen: () => TArgs
}

实现:

class Foo implements EventListener<UserConnectedArgs>, EventListener<UserDisconnectedArgs> {
listen = (): UserConnectedArgs => {
// user connection detection logic
}
listen = (): UserDisconnectedArgs => {
// user disconnection detection logic
}
}

和用法:

const userConnectionListener: EventListener<UserConnectedArgs> = new Foo()
const userDisconnectionListener: EventListener<UserDisconnectedArgs> = new Foo()

我会收到"重复标识符'侦听'"错误。

如果我错了,请纠正我,但我相信(一般来说(一个类应该能够多次实现具有不同类型的相同泛型接口,因为它可以为每个类型参数实现不同的行为。

在 C# 中实现相同的概念似乎按照我想要的方式工作,但我知道 C# 在运行时比 Typescript(或 JavaScript(更"类型感知"。

所以我问,你认为我应该怎么做?

提前感谢!

我是打字稿中的泛型新手,所以也许这是错误的......但对我来说,你似乎不需要两个不同的通用定义:

interface EventListener<Args> {
listen: () => Args
}

使用不同类型的参数的类

class Foo implements EventListener<Args> {
listen() : Args {
// the returned "something" value will have type Args
return something
}
}

用法

const userConnectionListener: EventListener<UserConnectedArgs> = new Foo()
const userDisconnectionListener: EventListener<UserDisconnectedArgs> = new Foo()

userConnectionListener.listen()      // will return data of type UserConnectedArgs
userDisconnectionListener.listen()   // will return data of type UserDisconnectedArgs

最新更新