Typescript 返回实现接口的类的函数:缺少属性
打字稿3.9 我想创建一个工厂函数,它返回一个实现特定接口的类: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 } 导出
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;}代码>来自类转换器包。对不起,我没有注意到它是从哪里来的。:)