【问题标题】:Property 'runStaticMethod' is a static member of type 'DemoClass'属性“runStaticMethod”是“DemoClass”类型的静态成员
【发布时间】:2019-08-11 06:06:21
【问题描述】:

我在构建以下打字稿代码时收到以下错误。

Property 'runStaticMethod' is a static member of type 'DemoClass'

打字稿代码:


export class Main {
    constructor(private demo: DemoClass) { }
    public run() {
        this.demo.runStaticMethod();
    }
}

export class DemoClass {
    public static runStaticMethod() {
        console.log('run...');
    }
}

new Main(DemoClass).run();

当我构建上述 typescript 代码时,我收到以下 console 错误。但javascript 代码按预期运行。

控制台错误:

Chitty:tsc NatarajanG$ tsc
src/index.ts:5:19 - error TS2576: Property 'runStaticMethod' is a static member of type 'DemoClass'

5         this.demo.runStaticMethod();
                    ~~~~~~~~~~~~~~~

Chitty:tsc NatarajanG$ 

【问题讨论】:

  • 您的demo 属性不是DemoClass 类型,而是typeof DemoClass 类型。将其更改为它应该可以工作(尽管您可能会选择将其重构为更通用的东西......否则只需 Main 依赖于 DemoClass 构造函数而无需将其传递)。如果您对DemoClass 类型和DemoClass 值之间的区别感到困惑,请参阅this answer
  • 另请注意,正如所写,DemoClass 类型为空(没有非静态属性或方法),即muddling up the issue。在上面的代码中将实例属性添加到DemoClass,您还将在new Man(DemoClass) 上收到错误,因为DemoClass 不应属于DemoClass 类型。

标签: typescript static


【解决方案1】:

我的测试表明,为DemoClass 添加interface 并定义runStaticMethod 可以解决错误,例如...

export interface DemoClass {
    runStaticMethod(...args: any[]): any;
}

...为了方便复制/粘贴,这里是进一步自定义的起点...

export interface DemoClass {
    runStaticMethod(...args: any[]): any;
}


export class Main {
    constructor(private demo: DemoClass) { }
    public run() {
        this.demo.runStaticMethod();
    }
}


export class DemoClass {
    public static runStaticMethod() {
        console.log('run...');
    }
}


new Main(DemoClass).run();

【讨论】:

    【解决方案2】:

    因为它是一个静态属性,您应该按照 TS 要求的方式访问它:DemoClass.runStaticMethod(),尽管 javascript 支持 this.demo.runStaticMethod()

    https://www.typescriptlang.org/docs/handbook/classes.html#static-properties

    每个实例通过添加类名来访问这个值。与添加 this 类似。在实例访问之前,我们在前面加上Grid。在静态访问之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多