gpt4 book ai didi

typescript - 如何在 TypeScript 中显式定义泛型返回类的返回类型?

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:45 25 4
gpt4 key购买 nike

我有这样的代码:

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 的回答对我不起作用。它说 找不到名称“NewEventEmitter”。您是说“NodeEventEmitter”吗?

编辑 2:@KarolMajewski 的回答确实有效。为了使其工作,必须将类分配给局部变量。这是 playground example .

最佳答案

在编写显式返回类型和让 TypeScript 推断它们的类型之间,还有第三种方法:

import * as events from 'events';

interface IEventEmitter<EventTypes> { /* ... */ }

export function EventEmitter<EventTypes>(): typeof MyClass {
const MyClass = class extends events.EventEmitter implements IEventEmitter<EventTypes> {};

return MyClass;
}

尽管这有点诡计,而且它需要所谓的不必要的局部变量。在这种情况下,此变量 (MyClass) 仅用于从中读取类型。

关于typescript - 如何在 TypeScript 中显式定义泛型返回类的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53785341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com