我有一个界面:
export interface DisabledFormFields {
active: number,
functions: {
get?($event: any): string;
set?($event: any): void;
}
}
然后我根据这个表面创建对象:
var instance = {
active: 0,
set(event) {
this.active = event.index;
},
get(event) {
return "-";
},
}
使用此:
instance.set({index: 0});
instance.get({});
为什么我无法使用对象方法中的active
描述符访问属性this
?
答案 0 :(得分:2)
您的(略有变化)对象:
var instance: Disable = {
active: 0,
set(event: any) {
this.active = event.index;
},
get(event: any) {
event;// doing nothing but dealing with the noUnusedParameteres
return "-";
},
}
可以有这个界面:
interface Disable {
active: number;
set?(event: any): void; // not necessarily optional
get?(event: any): string;// idem
}
如果set和get是可选的,则必须使用类型保护来查看它们是否已定义:
if(instance.set) {
instance.set({index: 1});// it is defined in this block
}
在您的原始界面中,您拥有了这个内部对象......
functions: {
get?($event: any): string;
set?($event: any): void;
}
您没有包含在您的对象中。该对象也没有实现接口,因为结构不同,并且在var声明中没有注释。您必须更改界面或对象。
答案 1 :(得分:1)
我已经在操场上试过了这个
var instance = {
active: 0,
set(event) {
this.active = event.index;
},
get(event) {
return "<h1>-</h1>";
},
}
instance.set({index: 0});
instance.get({});
document.writeln(instance.get({}));
它转化为:
var instance = {
active: 0,
set: function (event) {
this.active = event.index;
},
get: function (event) {
return "<h1>-</h1>";
},
};
instance.set({ index: 0 });
instance.get({});
document.writeln(instance.get({}));
点击运行时,我在浏览器中打开了一个新标签: