类型(编辑器内部)

时间:2018-02-14 15:57:02

标签: javascript typescript visual-studio-code

我有以下TypeScript界面和方法:

namespace a {

  export interface componentType<T extends component> {
    new(element?: HTMLElement): T
    runStaticTick(comp: componentType<T>, tick?: number): void
  }

  export abstract class component {

    public static components: component[] = []

    public findComponent<T extends component>(comp: componentType<T>, callback?: (comp: T) => void) {
      let c = component.components.find(c => c instanceof comp) as T
      c instanceof component && typeof callback == 'function' && callback(c)
      return c
    }

  }

  export abstract class element extends component { }
}

这是 .d.ts

declare namespace a {
  interface componentType<T extends component> {
    new(element?: HTMLElement): T;
  }
  abstract class component {
    findComponent<T extends component>(comp: componentType<T>, callback?: (comp: T) => void): T;
  }
  abstract class element extends component { }
}

然后,为了测试该方法是否有效,我有JavaScript

/// <reference path="../src/test.d.ts"/>

class checklist extends a.element {
  sayHi() { console.log('Hi') }
}

class myclass extends a.component {
  created() {
    this.findComponent(checklist, item => {
      item.sayHi()
    })
  }
}

代码在浏览器中有效,但在编辑器中,它表示item类型为component时应为checklist类型。有没有办法解决这个问题,或者这是打字稿的问题吗?

对于完整项目:https://github.com/TheColorRed/horsepower

修改

我弄清楚是什么导致了这个问题:

export interface componentType<T extends component> {
  new(element?: HTMLElement): T
  runStaticTick(comp: componentType<T>, tick?: number): void
}

如果我发表评论runStaticTick,它会解决智能感知问题。但后来我有错误说它不存在:

  

错误TS2339:属性&#39; runStaticTick&#39;类型&#39; componentType&#39;

上不存在

1 个答案:

答案 0 :(得分:1)

问题是由于方法runStaticTick中的属性。

而是使用

comp: componentType<T>

我应该使用

comp: componentType<component>

出于某种原因,T导致了我不知道的问题。如果有人知道这个问题是什么,请告诉我。