我有一个新的通用接口,看起来像这样:
interface IFoo<T> {
new (scope: T);
}
当我尝试在一个类中实现它时,如下所示:
class BaseFoo<T> implements IFoo<T> {
constructor(scope: T) {
}
}
我收到一个错误:“类 BaseFoo 声明了接口 IFoo,但没有实现它:类型 'IFoo' 需要构造签名,但类型 'BaseFoo' 缺少一个。”
我究竟做错了什么?
我有一个新的通用接口,看起来像这样:
interface IFoo<T> {
new (scope: T);
}
当我尝试在一个类中实现它时,如下所示:
class BaseFoo<T> implements IFoo<T> {
constructor(scope: T) {
}
}
我收到一个错误:“类 BaseFoo 声明了接口 IFoo,但没有实现它:类型 'IFoo' 需要构造签名,但类型 'BaseFoo' 缺少一个。”
我究竟做错了什么?
通常,您不会将构造细节放在界面上。如何构造对象不是其合同的一部分。
该接口是某些行为的承诺,因此您可以使用:
interface IFoo<T> {
getById (id: number) T;
}
无论构造函数如何,我现在都可以提供接口的任何实现,因为它可以执行我需要的操作。
如果您需要该项目的公共句柄,您可以将属性放在界面上:
interface IFoo<T> {
scope: T;
}
您可以在 TypeScript 中的接口上定义构造函数的原因是接口用于为库和外部代码编写声明 - 因此,能够为无法表示为 TypeScript 类的事物编写接口很有用。