我想在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
进行正确的类型检查?
答案 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');