Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 返回实现接口的类的函数:缺少属性_Typescript_Nestjs - Fatal编程技术网

Typescript 返回实现接口的类的函数:缺少属性

Typescript 返回实现接口的类的函数:缺少属性,typescript,nestjs,Typescript,Nestjs,打字稿3.9 我想创建一个工厂函数,它返回一个实现特定接口的类: export interface A<T>{ list(): Promise<T> } export function Factory<T>(): A<T> { class AHost implements A<T>{ async list() { return {} as any } } return AHost } 导出

打字稿3.9 我想创建一个工厂函数,它返回一个实现特定接口的类:

export interface A<T>{
  list(): Promise<T>
}

export function Factory<T>(): A<T> {
  class AHost implements A<T>{
    async list() {
      return {} as any
    }
  }
  return AHost
}
导出接口A{
列表():承诺
}
导出函数工厂():A{
类AHost实现了{
异步列表(){
将{}返回为任意值
}
}
回程航母
}
但我得到了以下错误:

Property 'list' is missing in type 'typeof AHost' but required in type 'A<T>'.
属性“list”在类型“typeof AHost”中缺失,但在类型“A”中是必需的。
尽管
list
是在
AHost
上定义的。这是一个很大的启发。我无法一对一地使用它,因为当我使用
Type
时,我得到
TS2315:Type'Type'不是泛型。
错误


更大的情况是:我想创建一个抽象服务,使用EntityClassOrSchema(Typeorm)作为factory函数的输入参数,这样我就可以轻松地为各种实体生成服务。

您的factory接口需要的是A实例,而不是A类

你应该把你的工厂类型改成这样

export interface A<T>{
  list(): Promise<T>
}
// add type of class there
export type B<T> = new () => A<T>

export function Factory<T>(): B<T> {
  class AHost implements A<T>{
    async list() {
      return {} as any
    }
  }
  return AHost
}
导出接口A{
列表():承诺
}
//在那里添加类的类型
导出类型B=new()=>A
导出函数工厂():B{
类AHost实现了{
异步列表(){
将{}返回为任意值
}
}
回程航母
}

您返回的是类,而不是实例
returnnewahost()
可以正常工作,因为这是一个实现
A
的实例。或者,当您想要返回该类时,将返回类型设为例如
{new():A}
也可以,这很快。谢谢。使用返回类型ClassType对我很有用。我不知道什么是ClassType,但您可以查看有关类的静态端和实例端的信息。这是一个
导出声明类型ClassType={new(…args:any[]):t;}来自类转换器包。对不起,我没有注意到它是从哪里来的。:)