我正在努力分配类型。
在下面的示例中,我希望能够使用我为函数createMock_UserService
提供的类型。如果我调用具有所需类型的函数,它可以正常工作,但是当我没有提供类型并且想要手动分配Child
时,它会失败并且下面的代码中记录了错误。
export class Parent {
}
export class Child extends Parent {
}
export function createMock_UserService<T extends Parent>(type?: Type<T>) {
if(!type) {
// this fails -> Type 'Child' is not assignable to type 'T'
type = Child;
}
// do stuff with type
injector.get(type);
}
// calling it works
createMock_UserService(Child);
// this doesn't
createMock_UserService();
Type<T>
定义为(这是angular的代码和打字稿核心)
export declare const Type: FunctionConstructor;
interface FunctionConstructor {
/**
* Creates a new function.
* @param args A list of arguments the function accepts.
*/
new(...args: string[]): Function;
(...args: string[]): Function;
readonly prototype: Function;
}
我该如何使这项工作? 我感觉我错过了一些明显的东西。
答案 0 :(得分:0)
我让它变得更复杂了。
以下是它的工作原理(略有重构)
export function createMock_UserService(injector: Injector, type: Type<UserService<UserWithPermissions>> = UserServiceMock): jasmine.Spy {
return spyOn(injector.get(type), 'getCurrentUser');
}
不再使用泛型,只是简单的继承。