【发布时间】:2017-12-12 07:51:51
【问题描述】:
我有一个 TypeScript 接口,它有一个名为“send”的函数,该函数被两个允许的签名重载。
export interface ConnectionContext {
send(data: ConnectionData): void;
send(data: ConnectionData, timeout: number): Promise<ConnectionData>;
}
我正在尝试创建一个实现此接口的匿名对象:
const context: ConnectionContext = {
send: (data: ConnectionData, timeout?: number): void | Promise<ConnectionData> => {
//
}
};
但是,TypeScript 2.4.1 会产生以下错误:
Error:(58, 15) TS2322:Type '{ send: (data: ConnectionData, timeout?: number | undefined) => void | Promise<ConnectionData>; }' is not assignable to type 'ConnectionContext'.
Types of property 'send' are incompatible.
Type '(data: ConnectionData, timeout?: number | undefined) => void | Promise<ConnectionData>' is not assignable to type '{ (data: ConnectionData): void; (data: ConnectionData, timeout: number): Promise<ConnectionData>; }'.
Type 'void | Promise<ConnectionData>' is not assignable to type 'Promise<ConnectionData>'.
Type 'void' is not assignable to type 'Promise<ConnectionData>'.
我知道我可以通过一个班级来做到这一点,但如果有某种方法可以在没有班级的情况下做到这一点,我宁愿不创建整个班级。
【问题讨论】:
-
我也遇到了类似的问题,也很想知道这个问题的一般答案。
标签: typescript interface anonymous-types overloading