如何使用静态方法声明接口?

时间:2015-11-15 12:03:34

标签: typescript

我想在baz中的接口 - IFoo中声明一个替代构造函数,但在TypeScript中似乎是不可能的:

interface IFoo {
    bar(): boolean;
    static baz(value): IFoo; 
}

class Foo implements IFoo {
    constructor(private qux) {}
    bar(): boolean {
        return this.qux; 
    }
    static baz(value): IFoo {
        return new Foo(value);
    }
}

执行此操作的方法是什么,并对baz进行正确的类型检查?

3 个答案:

答案 0 :(得分:11)

您可以使用匿名类来执行此操作:

一般

export const MyClass: StaticInterface = class implements InstanceInterface {
}

您的例子:

interface IFooStatic {
  baz(value): IFoo;
}

interface IFoo {
  bar(): boolean;
}

const Foo: IFooStatic = class implements IFoo {
  constructor(private qux) {}
  bar(): boolean {
    return this.qux; 
  }
  static baz(value): IFoo {
    return new Foo(value);
  }
}

答案 1 :(得分:1)

接口do not support静态方法。

can't use abstract classes也遇到了问题:

interface IFoo {
    bar(): boolean; 
}


abstract class FooBase {    
    abstract static baz(value): IFoo; // this is NOT allowed
}


class Foo extends FooBase {
    constructor(private qux) {
        super();
    }

    bar(): boolean {
        return this.qux; 
    }
    static baz(value): IFoo {
        return new Foo(value);
    }
}

答案 2 :(得分:0)

您无法在TypeScript中定义界面中的静态。如果您想对工厂方法进行类型检查,只需删除static关键字。

您仍然可以在prototype属性上使用这样的工厂方法:

var FootInstance = Foo.prototype.baz('test');