【问题标题】:supporting static and non-static methods in interface typescript在接口打字稿中支持静态和非静态方法
【发布时间】:2019-07-30 00:49:29
【问题描述】:

显然(我是初学者)ts 不支持界面中的静态方法,但是有一个解决方法解释了它Val's 答案。当你的类只有静态方法时它可以工作。但是如果我的类是静态和非静态方法的组合,这将引发错误:

Class 'MyClass' incorrectly implements interface 'sampleInterface'.
  Property 'staticFunction' is missing in type 'MyClass' but required in type 'sampleInterface'

知道如何支持这一点吗?

export function staticDecorator<T>() {
    return (constructor: T) => {};
}

interface sampleInterface {
   staticFynction(/*something*/): promise<void>;
   nonStaticFynction(/*something*/): promise<void>;
}

@staticDecorator()
class MyClass implements sampleInterface  {
    public static staticFynction(/*something*/): promise<void>{
      //something
    }
    public nonStaticFynction(/*something*/): promise<void>{
      //something
    }
}

【问题讨论】:

    标签: typescript


    【解决方案1】:

    一般需要两个接口;一个用于类的实例端,一个用于类的静态端。例如:

    interface SampleInterfaceInstancePart {
      nonStaticFunction(/*something*/): Promise<void>;
    }
    interface SampleInterfaceStaticPart {
      staticFunction(/*something*/): Promise<void>;
    }
    

    然后您可以使用您的staticDecorator 来确保该类实现了静态端,并使用常规的旧implements 子句来确保它实现了实例端:

    @staticDecorator<SampleInterfaceStaticPart>()
    class MyClass implements SampleInterfaceInstancePart {
      public static async staticFunction(/*something*/): Promise<void> { }
      public async nonStaticFunction(/*something*/): Promise<void> { }
    }
    

    希望有所帮助;祝你好运!

    【讨论】:

      猜你喜欢
      • 2021-04-27
      • 2023-03-26
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      相关资源
      最近更新 更多