【问题标题】:TypeScript: Reference interface in class when using AMDTypeScript:使用 AMD 时类中的引用接口
【发布时间】:2014-10-13 07:41:24
【问题描述】:

到目前为止,我已将所有内容设置为将 TypeScript 与 requirejs 一起使用。我用 to 类测试了我的场景,一切正常,但是当我尝试使用接口定义时失败了。

IComponent.ts:

/// <reference path="Actor.ts" />

interface IComponent {
  owner: Actor

  init()
  update(delta: number)
  render()
}

演员.ts:

/// <reference path="IComponent.ts" />

class Actor {
    private components: IComponent[] = []

    add(component: IComponent) {
        component.owner = this;
        this.components.push(component);
    }

    remove(component: IComponent) {
        var index = this.components.indexOf(component);
        this.components.splice(index, 1);
    }

    update(delta: number) {
        this.components.forEach(c => c.update(delta));
    }

    render() {
        this.components.forEach(c => c.render());
    }

    init() {
        this.components.forEach(c => c.init());
    }
}

export = Actor

我的 IComponent.ts 中出现错误:找不到符号“Actor”。如何从我的界面引用我的 Actor 类?

【问题讨论】:

    标签: interface requirejs typescript amd


    【解决方案1】:

    就目前而言,您有一个逻辑循环引用,Actor 依赖于 IComponent,而 IComponent 依赖于 Actor。

    如果没有Actor 类,您的IComponent 接口几乎没有用处,因此我推荐的解决方案是将IComponent 接口放在您的actor.ts 文件中。这样,依赖是自给自足的。

    export interface IComponent {
        owner: Actor;
    
        init();
        update(delta: number);
        render();
    }
    
    export class Actor {
        private components: IComponent[] = []
    
        add(component: IComponent) {
            component.owner = this;
            this.components.push(component);
        }
    
        remove(component: IComponent) {
            var index = this.components.indexOf(component);
            this.components.splice(index, 1);
        }
    
        update(delta: number) {
            this.components.forEach(c => c.update(delta));
        }
    
        render() {
            this.components.forEach(c => c.render());
        }
    
        init() {
            this.components.forEach(c => c.init());
        }
    }
    

    或者,您可以使IComponent 依赖于Actor 的抽象而不是具体类(在您的情况下,可能是IActor。现在您的Actor 依赖于IComponent,但这就是结束链的。

    export interface IComponent {
        owner: IActor;
    
        init();
        update(delta: number);
        render();
    }
    
    export interface IActor {
        add(component: IComponent);
        remove(component: IComponent);
        update(delta: number);
        render();
        init();
    }
    

    黑客修复:

    这解决了 IComponent.ts 文件中的错误,但不是很好。

    import Actor = require('actor');
    
    interface IComponent {
        owner: Actor;
    
        init();
        update(delta: number);
        render();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多