Typescript - 函数 属性 中的泛型未得到解析
Typescript - generics in function property does not get resolved
我是打字稿的新手,我正在尝试使用嵌套泛型。到目前为止,我无法让它们像我期望的那样工作,可能我遗漏了一些明显的东西。这是我的示例代码:
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): error TS2339: Property 'payload' does not exist on type 'myServiceResponse'.
这样试试。主要问题是您在 callback
的定义中进行的强制转换及其分配位置。此外, class 也需要是通用的。否则,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);
};
如您所见,现在您不必在 las 语句中指定 data
的类型,它是由 request 的定义推断出来的。
我是打字稿的新手,我正在尝试使用嵌套泛型。到目前为止,我无法让它们像我期望的那样工作,可能我遗漏了一些明显的东西。这是我的示例代码:
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): error TS2339: Property 'payload' does not exist on type 'myServiceResponse'.
这样试试。主要问题是您在 callback
的定义中进行的强制转换及其分配位置。此外, class 也需要是通用的。否则,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);
};
如您所见,现在您不必在 las 语句中指定 data
的类型,它是由 request 的定义推断出来的。