我正在尝试创建一个接口,用于定义具有一系列函数的接口和一个这样的防护,如下所示:
interface MyInterface {
myFunctions: ((this:MyInterface, somevar: string): void)[];
}
但是,当我尝试使用它如下:
class Myclass implements MyInterface {
myFunctions: ((this:Implementation, somevar: string): void)[];
useFunction (): void {
this.myFunctions[0](somevar);
}
}
下面的错误发生了 类'Myclass'错误地实现了接口'MyInterface'
有人知道我是如何实现的?
答案 0 :(得分:1)
首先,函数类型使用=>
声明,而不是:
interface MyInterface {
myFunctions: ((this:MyInterface, somevar: string) => void)[];
}
其次,为什么课程中有this:Implementation
,而不是界面中声明的this.MyClass
或this.MyInterface
?它应该是一致的 - 在类和接口中都是this.Implementation
,在接口中是this.MyInterface
,在类中是this.MyClass
。
然后,在javascript(和typescript)中,为了调用函数并设置它的this
上下文,函数名必须紧跟(
,例如this.useFunction()
。
您有this.myFunctions[0](somevar)
这意味着您正在调用myFunctions
的第一个元素作为自由函数,而不设置其this
上下文。您需要在此处使用call()明确设置this
:
interface MyInterface {
myFunctions: ((this:MyInterface, somevar: string) => void)[];
}
class Myclass implements MyInterface {
myFunctions: ((this: Myclass, somevar: string) => void)[] = [];
useFunction(somevar: any): void {
this.myFunctions[0].call(this, somevar);
}
}