Typescript - обобщения в свойстве функции не разрешаются

Я новичок в машинописном тексте и пытаюсь поиграть с вложенными дженериками. К настоящему времени я не могу заставить их работать так, как я ожидал, вероятно, я упускаю что-то очевидное. Вот мой пример кода:

type GenericServiceResponse<T> = {
  status: number;
  payload: T;
}

type myServicePayload = {
  name: string;
  surname: string;
}

type myServiceResponse = GenericServiceResponse<myServicePayload>;

class GenericServiceRequest {
  callback?: <T>(data:T) => void;
}

let request = new GenericServiceRequest();

request.callback = <myServiceResponse>(data:myServiceResponse) => {
  console.info(data.payload.name);
};

Вывод компилятора tsc (целевой es5):

main.ts (20,23): ошибка TS2339: свойство «полезная нагрузка» не существует для типа «myServiceResponse».


person CloudStrife91    schedule 22.03.2018    source источник


Ответы (1)


Попробуйте так. Основная проблема заключалась в приведении описания callback и его назначении. Кроме того, класс тоже должен быть универсальным. В противном случае Typescript не знает, что означает T.

type GenericServiceResponse<T> = {
  status: number;
  payload: T;
}

type myServicePayload = {
  name: string;
  surname: string;
}

type myServiceResponse = GenericServiceResponse<myServicePayload>;

class GenericServiceRequest<T> {
  callback?: (data:T) => void;
}

let request = new GenericServiceRequest<myServiceResponse>();

request.callback = data => {
  console.info(data.payload.name);
};

Как видите, теперь вам не нужно указывать тип data в последнем предложении, это определяется определением запроса.

person Oscar Paz    schedule 22.03.2018