【发布时间】:2017-08-11 02:37:06
【问题描述】:
在我的一个 ts 模块中,我定义了一个接口,以及一个实现它的类(为简洁起见):
export interface Encoder {
name: string;
exec: (str: string, origParam?: string | null) => string;
}
class NOPEncoder implements Encoder {
public name: "None";
public exec(str: string, origParam?: string | null): string {
// origParam is not important in this case, this method is designed as a no-op
return str;
}
}
但是,尝试创建 Map<string, Encoder> 给我带来了一些问题。我已经尝试了这两种构造上述类型值的方法:
// Method 1
const encoders = new Map<string, Encoder>();
encoders.set("NOP", NOPEncoder);
// Method 2
const encoders = new Map<string, Encoder> ([
["NOP", <Encoder>NOPEncoder],
]);
方法 1 和方法 2 都给我一个类似 "Type 'typeof NOPEncoder' cannot be converted to type 'Encoder'. Property 'exec' is missing in type 'typeof NOPEncoder'." 的错误但是,NOPEncoder 类显式实现了 Encoder 接口(编译器对此很好),它显然有一个 exec 方法.我在这里做错了什么,以至于编译器不接受 NOPEncoder 被强制转换为 Encoder 实例?
【问题讨论】:
标签: typescript