【问题标题】:Typescript + Angular expose service methodTypescript + Angular 公开服务方法
【发布时间】:2015-02-05 10:01:55
【问题描述】:

我在一个项目中使用 typescript 和 angular。当我想公开服务的方法时,我会执行以下操作:

export class MyService implements IService {

    //Public method
    public myMethod: Function;

    public constructor() {

        this.myMethod= this._myMethod;

    }

    private _myMethod(): void {
       //...
    }

当我处理获得许多方法的服务时,我不必滚动查看方法的定义,这很棒。但是现在当我在另一个服务或控制器中使用我的服务的方法时,我看不到我的方法的签名......所以我失去了打字稿的优势......

有什么想法吗?

谢谢。

【问题讨论】:

  • 1. IService 接口中是否列出了这些方法? 2.你是否声明控制器中的注入服务为IService类型?
  • 不,目前我没有使用 IService。
  • 这就是您看不到签名/智能感知的原因。您需要在控制器中的 DI 声明中指定您的服务属于您所说的类型。
  • 含义function (myService: IService) {...}

标签: javascript angularjs typescript encapsulation


【解决方案1】:

简单的答案是你需要给你的函数定义一个签名

class MyService {
    public myMethod: () => void; //don't use Function

    constructor() {
        this.myMethod = this.myMethod;
    }

    _myMethod = () => {

    }

}

但是更好的方法是定义一个接口:

interface IMyService extends IService {
    myMethod: () => void;
}

class MyService implements IMyService {
    constructor() {

    }

    myMethod = () => {

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多