在 $mdSidenav 上肯定输入 angular material 错误

Definitely typed with angular material error on $mdSidenav

只是想弄清楚为什么我在切换 $mdSidenav 时遇到错误。这不是一个破坏性错误,因为代码按预期运行,但我觉得我可能在打字稿中错误地实现了它。

我添加了 definitely typed 和 angular material 以及像这样的简单控制器

module app.layout {
interface IMenuModel {
    menuItems: app.layout.IMenuItems[];
    toggleSidenav(menuId: string): void; 
}

class MenuCtrl implements IMenuModel {

    menuItems: app.layout.IMenuItems[];

    constructor(private $mdSidenav: ng.material.ISidenavObject) {
        var vm = this;
    }

    toggleSidenav(menuId: string): void {
        this.$mdSidenav(menuId).toggle();
        console.log(menuId);
    }
  }

  angular.module("app").controller("menuCtrl", MenuCtrl);
}

核心代码被编译成

     MenuCtrl.prototype.toggleSidenav = function (menuId) {
          this.$mdSidenav(menuId).toggle();
          console.log(menuId);
     };

而 html 是

<md-button ng-click="vm.toggleSidenav('left')" hide-gt-sm class="md-icon-button"> 
  menu  
</md-button>

所以这在浏览器中有效,菜单会切换。但是 IDE 中有一个错误指出

如果您愿意,我觉得我没有按照 "typescript" 的方式实施。明确输入的 ng.material.ISidenavObject 看起来像这样

 interface ISidenavObject {
    toggle(): angular.IPromise<void>;
    open(): angular.IPromise<void>;
    close(): angular.IPromise<void>;
    isOpen(): boolean;
    isLockedOpen(): boolean;
}

只是改变

constructor(private $mdSidenav: ng.material.ISidenavObject) {

constructor(private $mdSidenav: ng.material.ISidenavService) {

可以看到对应的definition.