【发布时间】:2018-12-20 05:55:50
【问题描述】:
我有这样的代码:
import * as events from 'events' // Node.js events module
// my own version of EventEmitter with better typing
interface IEventEmitter<EventTypes> { /* ... */ }
// eslint-disable-next-line typescript/explicit-function-return-type
export function EventEmitter<EventTypes>() {
// merge the IEventEmitter interface and EventEmitter as IEventEmitter
// implementation into one.
// XXX Is there a better way?
return class NewEventEmitter
extends ((events.EventEmitter as unknown) as IEventEmitter<EventTypes>)
implements IEventEmitter<EventTypes> {}
}
如你所见,我禁用了一个 eslint 规则,这样它就不会抱怨我没有指定返回类型,而是让返回类型被推断出来。
但是,我将如何编写返回类型?
编辑:这是一个playground example,显示@KarolMajewski 的答案对我不起作用。上面写着Cannot find name 'NewEventEmitter'. Did you mean 'NodeEventEmitter'?。
编辑 2:@KarolMajewski 的回答确实有效。要使其工作,必须将类分配给局部变量。这是playground example。
【问题讨论】:
-
使用IntelliSense查看推断类型,然后手动复制到返回类型注解? (安装了 node.js 事件的人可能会更明确地告诉你)
-
@jcalz 如果这行得通,那就太棒了。智能感知告诉我要做到这一点,这实际上导致了 Karol Majewski 在那个答案中告诉我要做的事情,并且我用游乐场链接更新了问题,表明这不起作用。
-
哦,我明白了,它使用的是内部作用域中的某个名称。
标签: typescript generics