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

How to use this descriptor in object Typescript?

我有一个接口:

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

为什么我无法使用对象方法内部的 this 描述符访问 属性 active

您的(略有改动的)对象:

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 声明中没有注释。您必须更改界面或您的对象。

我用过游乐场并尝试过这个

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

当点击 运行 时,它会在我的浏览器中打开一个新标签页:

-