例如:
HttpService.ts
:
export interface IHttpService {
request(): Promise<any>;
formPostRequest(): any;
}
export class HttpService implements IHttpService {
public async request() {
//
}
public formPostRequest() {
//
}
}
现在,根据依赖项注入,我将使用HttpService
。像这样:
GoogleAccount.ts
:
import { HttpService } from './HttpService';
class GoogleAccount {
private httpService: InstanceType<typeof HttpService>;
constructor(httpService: InstanceType<typeof HttpService>) {
this.httpService = httpService;
}
public findGoogleAccountById(id: string) {
return this.httpService.request();
}
}
以上代码将InstanceType
的{{1}}和typeof
预定义类型用作TypeScript
的类型
我经常使用的另一种方法是使用httpService
作为interface
的类型,如下所示:
httpService
它们在import { IHttpService } from './HttpService';
class GoogleAccount2 {
private httpService: IHttpService;
constructor(httpService: IHttpService) {
this.httpService = httpService;
}
public findGoogleAccountById(id: string) {
return this.httpService.request();
}
}
的类型系统下都可以正常工作。 TypeScript
不抱怨类型错误。那么,当作为静态类型的变量时,它们之间有什么区别?
在这种情况下也许不需要使用tsc
吗?
答案 0 :(得分:1)
我同意,如果您知道需要实现的基础接口,则不必使用InstanceType<typeof HttpService>
。
InstanceType的用法应限于无法直接获取基础类型的情况。这里有一些很好的用例Link