(Typescript 2.1.0 / VS Code 1.3.0)
我有一个Request
类看起来像
export default class Request<T>{
static name = "adf";
private url:string;
constructor(url:string){
this.url = url;
}
list(){
return new Promise<T[]>(resolve=>{
request(this.url,function(err,data: T[]){
resolve(data);
})
});
}
get(id:number){
return new Promise<T>(resolve=>{
request(this.url,function(err,data: T){
resolve(data);
});
});
}
}
我试图像这样创建一个工厂函数:
const enum requestType{
machine,
part
}
export default function(type: requestType): Request<T>(T.endpoint){
return new Request<Machine>(Machine.endpoint);
}
我收到错误cannot find name T
,并抱怨使用隐含的任何内容。制作返回通用的工厂函数的正确方法是什么?
答案 0 :(得分:1)
如果你想拥有一个泛型函数,那么它需要具有泛型类型decelration:
function fn<GenericType>(....
根据您的代码,您的功能看起来应该更像这样:
function factory<T>(type: requestType): Request<T> {
switch(type) {
case requestType.machine:
return new Request<T>(Machine.endpoint);
case requestType.part:
return new Request<T>(Part.endpoint);
}
return null;
}
然后你这样称呼它:
let request: Request<Machine> = factory(requestType.machine);