我将尝试用一个例子来解释我的情况。
假设我有界面:
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