如何在对象Typescript中使用此描述符?

时间:2017-11-25 20:03:05

标签: typescript typescript2.0

我有一个界面:

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

2 个答案:

答案 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({}));

点击运行时,我在浏览器中打开了一个新标签:

-