【问题标题】:Emberjs and TypeScript - computed propertyEmberjs 和 TypeScript - 计算属性
【发布时间】:2024-05-14 06:05:01
【问题描述】:

我目前正在尝试开发一些 EmberJs + TypeScript 原型。我正在使用这个tutorial,我被困在这个point。我应该如何在 TypeScript 中创建计算属性?

我尝试过类似的方法,但它不起作用:

module App {
export class TodoController extends Em.ObjectController {

    constructor() {
        super();
    }

    public isCompleted = ((key, value) => {
        var model = this.get('model');
        if (value === undefined) {
            // property being used as a getter
            return model.get('isCompleted');
        } else {
            // property being used as a setter
            model.set('isCompleted', value);
            //model.save();
            return value;
        }
    }).property('model.isCompleted');
}
}

【问题讨论】:

    标签: javascript ember.js typescript


    【解决方案1】:

    您不能使用 typescript 类语法来扩展 Ember 类。您必须像在普通 Javascript 中一样使用 extend 方法。原因是 Ember 不仅仅扩展了类的原型(从你的计算属性不工作中可以看出)。

    如果你真的想使用类语法,我建议要么使用为 Ember 构建的 EmberScript,要么使用 SweetJS 构建一个宏来做到这一点。不幸的是,两者都不能很好地与 Typescript 配合使用。

    或者,如果你觉得特别聪明,你可以修改 Typescript 生成的 __extends 方法,并可能以这种方式实现你想要的。

    但对于某些语法糖来说,这一切似乎都有些过头了。只需使用 Ember 提供的extend 方法即可。

    【讨论】: