Typescript + Angular: назначить тип для Type <T>не удалось - PullRequest
0 голосов
/ 17 мая 2018

Я борюсь с назначением типа.

В приведенном ниже примере я хочу иметь возможность работать с типом, который я предоставляю функции 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> определяется как (это угловой код и машинописное ядро)

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;
}

Как я могу заставить эту работу? У меня такое чувство, что я упускаю что-то очевидное.

Вот блик стека

1 Ответ

0 голосов
/ 18 мая 2018

Я сделал это намного сложнее, чем должно быть.

Вот как это работает (слегка переработано)

export function createMock_UserService(injector: Injector, type: Type<UserService<UserWithPermissions>> = UserServiceMock): jasmine.Spy {
  return spyOn(injector.get(type), 'getCurrentUser');
}

Больше не используется дженерики, просто простое, простое наследование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...