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函数非常有效。谢谢