我在 Typescript 中使用 Backbone.Marionette。我已经编写了我自己的 Marionette 类型描述。
var ProviderSpa = new Backbone.Marionette.Application();
ProviderSpa.addRegions({
'servicesRegion': "#services-offered"
});
ProviderSpa.servicesRegion.show();
我的问题是 addRegions 具有向 ProviderSpa 添加属性的副作用,TypeScript 不知道这一点,因此它提示“属性‘servicesRegion’在类型‘Backbone.Marionette.Application’的值上不存在” .
我如何告诉 TypeScript 将这些动态属性添加到类型的实例?
最佳答案
我在这个例子中使用了 BackBone Marionette 的缩减定义。
如果你有很多动态属性被添加到一个对象,你可能希望让事物保持动态而不是尝试为它们全部创建声明或接口(interface) - 特别是因为保持声明与新属性保持同步的开销与对实际上是动态属性进行静态类型化的好处相比,我不会付出代价。
在此示例中,使用方括号语法访问属性意味着它无需声明即可通过类型检查。重要的一点在最后一行。
您可以在 TypeScript playground 上进行测试.
declare module Backbone {
export module Marionette {
export class Application {
addRegions(regions: any): void;
}
}
}
var servicesRegion = 'servicesRegion';
var ProviderSpa = new Backbone.Marionette.Application();
ProviderSpa.addRegions({
servicesRegion: "#services-offered"
});
ProviderSpa[servicesRegion].show();
关于typescript - 我如何告诉 TypeScript 动态添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075487/