Typescript - 函数属性中的泛型无法解析

时间:2018-03-22 16:02:01

标签: function typescript generics ecmascript-5 nested-generics

我对打字稿很新,我试图使用嵌套泛型。到现在为止,我无法让它们像我期望的那样工作,可能我错过了一些明显的东西。这是我的示例代码:

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:属性&#39;有效负载&#39;类型&#39; myServiceResponse&#39;。

上不存在

1 个答案:

答案 0 :(得分: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的类型,它是由请求的定义推断的。