尝试使用泛型类型,但我似乎无法使其正常工作,尽管我确信这很简单。这是一个基本示例
// some module
type TMainResponse<T> = {
data: T;
};
interface Foo {
func<T>(): Promise<TMainResponse<T>>;
}
// local module
type TLocalResponse = {
result: boolean;
};
const obj: Foo = {
async func<TLocalResponse>() {
return {
data: {
result: true
}
};
}
};
(async function () {
await obj.func();
});
其结果是
Type 'Promise<{ data: { result: boolean; }; }>' is not assignable to type 'Promise<TMainResponse<T>>'.
Type '{ data: { result: boolean; }; }' is not assignable to type 'TMainResponse<T>'.
Types of property 'data' are incompatible.
Type '{ result: boolean; }' is not assignable to type 'T'.
16 async func<TLocalResponse>() {
~~~~
src/test.ts:7:3
7 func<T>(): Promise<TMainResponse<T>>;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The expected type comes from property 'func' which is declared here on type 'Foo'
我是在做错什么,还是只是误解了泛型的使用?
答案 0 :(得分:0)
我是在做错什么,还是只是误解了泛型的使用?
此界面至少有点不典型:
interface Foo {
func<T>(): Promise<TMainResponse<T>>;
}
Foo
没有类型参数,但是<T>
在正文中的两个位置使用。老实说,我不太确定应该的工作方式(没有编译错误,因此很可能是按设计工作的,如果有人可以在这里称重,可能会感兴趣),但是如果您更改界面保留类型参数:
interface Foo<T> {
func(): Promise<TMainResponse<T>>;
}
以及相应的用法:
const obj: Foo<TLocalResponse> = {
async func() {
return {
data: {
result: true
}
};
}
};