我有一个Exception1
类,它扩展了Error
类的JavaScript,同时还实现了一个接口SampleInterface
interface SampleInterface {
func(): string;
}
class SampleClass {
public message: string;
constructor(message: string) {
this.message = message;
}
}
class Exception1 extends Error implements SampleInterface {
constructor(message: string) {
super(message);
}
public func(): string {
return "Exception1"
}
}
在控制台中执行console.log(new Exception1('a').func())
时出现此错误
Uncaught TypeError: (intermediate value).func is not a function
at <anonymous>:1:33
但是,如果类扩展了一些其他类,例如
,则可以正常工作class Exception2 extends SampleClass implements SampleInterface {
constructor(message: string) {
super(message);
}
public func(): string {
return "Exception2"
}
}
在执行console.log(new Exception2('a').func())
时,我得到预期的输出Exception2
答案 0 :(得分:1)
当您扩展内置类型(如Array
,Error
或Map
)时,原型链有点混乱,您需要明确修复,以便成员在您的班级中定义的班级可用于您班级的实例。这在TypeScript docu。
因此,为了解决这个问题,您需要执行以下操作:
interface SampleInterface {
func(): string;
}
class Exception1 extends Error implements SampleInterface {
constructor(message: string) {
super(message);
// Explicitly fix the prototype chain
Object.setPrototypeOf(this, Exception1.prototype);
}
public func(): string {
return "Exception1"
}
}
console.log(new Exception1('a').func()) // and now it works