typescript - 我如何告诉 TypeScript 动态添加属性?

标签 typescript marionette

我在 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/

相关文章:

javascript - 为什么 Marionette.js 需要 JSON2.js?

node.js - 在 Mongoose 中保存填充值

javascript - 动态更改 Marionette ItemView 模板

Typescript 无法为函数对象推断出正确的参数类型

reactjs - 无法解析源映射...错误 : ENOENT: no such file or directory

typescript - lib.es2015.promise.d.ts(33, 34) : An argument for 'value' was not provided

typescript - 如何声明 Rx.Observable.fromPromise() 的 TypeScript 返回类型

reactjs - React - 如何检查用户是否仍然经过身份验证

javascript - 类型错误 : Cannot read property 'sortingLevel' of undefined

jquery - Marionette CompositeView AttachHtml after 而不是追加