我正在努力使我的代码更易读和简洁。
我当前遇到的最大问题是EventEmitter
类。每次创建使用EventEmitter
的新类时,我都必须声明EventEmitter
的所有函数,以使类更易于理解和使用。
例:
interface Hello {
addListener(event: 'hi', listener: (message: string) => void): this;
on(event: 'hi', listener: (message: string) => void): this;
...
}
class Hello extends EventEmitter {
constructor() { super(); }
}
我四处寻找解决办法,但我找不到任何适合我的办法,所以我试着想出我自己的办法。
interface EventEmitterEvents {
[event: string]: any[];
}
interface EventEmitterType<T extends EventEmitterEvents> extends EventEmitter {
addListener<K extends keyof T>(event: K, listener: (...args: T[K]) => void): this;
on<K extends keyof T>(event: K, listener: (...args: T[K]) => void): this;
...
}
class Hello extends EventEmitter implements EventEmitterType<{'hi': [string]}> { ... }
但是当我尝试实现EventEmitterType接口时,它会抛出一个错误
属性“添加侦听器”的类型不兼容
我发现,由于某种原因,在'add listener'
和函数中,event
类型被称为'string''symbol''number'
,这与eventemitter
不兼容,在eventemitterEvents
中,event
的类型是'string'
。
问题:是否有任何方法可以解决这个问题,如果没有,是否有任何其他方法可以重新创建这个功能(不必键入所有这些函数)?
编辑:如果我将事件参数设置为“string”
,它仍然会抛出错误,因为listener也与AddListener
不兼容,它说“any[]”不能分配给类型“t[K]”
。
将事件名称的类型缩小到string
(如extract
)可能会有所帮助。
或者如果您只希望keyof
运算符的结果是字符串,请在tsconfig.json
中添加具有“keyofstringsonly”:true
的配置。
我看到过一些关于的博客,这些博客似乎可以很好地为类添加行为。 但是,如果我有一个并且我要怎么办?作为一个case类,我不能扩展它(不推荐/强烈不鼓励从case类继承)。这些皮条客模式是否允许我将数据添加到case类中?
我想在表的第二列中追加 。输出应为 我不想使用,因为我需要在我的实际问题中追加嵌套的div。我制作了同样的小示例。JsFiddle
我正在使用Java代理和Javassist向一些JDK类添加一些日志记录。实际上,当系统加载一些TLS类时,Javassist会向它们添加一些额外的字节码,以帮助我调试一些连接问题。 问题是,考虑到这个类包含在代理jar中: 在我的代理的转换方法中,假设我试图使用javassist调用该类: 你认为这行得通,但我得到了这个: 有没有办法将该类[]添加到应用程序的类路径中?
问题内容: 我有五个按钮,是动态创建的。我的目标是:单击任何按钮以向其中添加活动类,当然还有其他任何人可以通过该活动类将其删除。我该如何实现? 问题答案: 您需要将状态引入组件并在事件处理程序中进行设置。例如render方法的输出: 事件处理程序(元素方法):
我正在使我的put方法在我的控制器类,但我有很多不同的属性,我想设置,有一些插件,我可以用来填写我的所有设置器
我有一个,我想为它设置。 我知道我可以用div包装它,并控制该div的子级的CSS,但如果可能的话,我希望避免多余的包装。 PrimeFaces版本:3.5。