Function TypeScript接口:在接口实现中作为属性或此函数

Function TypeScript接口:在接口实现中作为属性或此函数,function,properties,interface,typescript,Function,Properties,Interface,Typescript,我的问题是接口中的函数和实现中的this关键字 假设以下场景: 我有一个实现特定接口的类。接口的定义如下: module Contracts { export interface ISomeInterface { Foo: () => void; } } 实现可能如下所示: module MyClasses { export class SomeClass implements Contracts.ISomeInterface {

我的问题是接口中的函数和实现中的
this
关键字

假设以下场景:

我有一个实现特定接口的类。接口的定义如下:

module Contracts
{
    export interface ISomeInterface
    {
        Foo: () => void;
    }
}
实现可能如下所示:

module MyClasses
{
    export class SomeClass implements Contracts.ISomeInterface
    {
        public SomeValue: string = "Some fancy value";

        public Foo() 
        {
            alert(this.SomeValue);
        }
    }
}
var someClass = new MyClasses.SomeClass();
someClass.Foo();
public Foo = () =>
{
    alert(this.SomeValue);
}
当我从实例调用它时,它会起作用,如下所示:

module MyClasses
{
    export class SomeClass implements Contracts.ISomeInterface
    {
        public SomeValue: string = "Some fancy value";

        public Foo() 
        {
            alert(this.SomeValue);
        }
    }
}
var someClass = new MyClasses.SomeClass();
someClass.Foo();
public Foo = () =>
{
    alert(this.SomeValue);
}
现在,由于某些情况,函数不是这样调用的,而是在另一个上下文中调用的,导致
this
完全不同,导致
this.SomeValue
未定义

我了解到,当在另一个上下文中调用某个函数时,如果要正确访问
,可以使用下面的胖箭头:

module MyClasses
{
    export class SomeClass implements Contracts.ISomeInterface
    {
        public SomeValue: string = "Some fancy value";

        public Foo() 
        {
            alert(this.SomeValue);
        }
    }
}
var someClass = new MyClasses.SomeClass();
someClass.Foo();
public Foo = () =>
{
    alert(this.SomeValue);
}
(更多信息:)

但这并不满足接口。Foo被识别为类中的属性,但接口将其定义为方法。有道理


那么,我如何以一种好的方式解决这个问题呢?

最简单的方法是将绑定函数传递给回调函数(或其他任何函数)

例如:

let a: SomeClass = new SomeClass();
let boundFoo = a.Foo.bind(a);
boundFoo(); // this should be as you intended


编辑 我检查过了,看起来还可以。

类实现接口,编译器不会抱怨。

Strange。。。我的VisualStudio2015使用TypeScript 1.8.30.0,但不允许我编译它。不管怎么说,使用bind函数非常有效。谢谢