我收到以下错误:
输入'(ctx:any)=> Promise <{user:any;类别:任何; }>'不能分配给类型'(((ctx:NuxtContext)=> Promise)|未定义”
当我在Typescript中定义以下类时:
export default class App extends Vue implements NUXT {
async asyncData(ctx) {
await ctx.store.dispatch('loadAllCategories');
const user = ctx.store.state.user;
const categories = ctx.store.state.categories;
return { user, categories };
}
其中NUXT是定义为:
export interface NUXT {
fetch?: <T = any>(ctx: NuxtContext) => Promise<T>;
asyncData?: <T = any>(ctx: NuxtContext) => Promise<T>;
[key: string]: any;
}
export interface NuxtContext {
state: any;
process: any;
}
这让我很困惑,因为我希望实现NUXT的类隐式知道asyncData
签名。此外,该错误没有任何意义。可以?我的意思是返回的Promise<{ user: any; categories: any; }>
符合Promise<all>
的要求,对吧?
答案 0 :(得分:0)
这让我感到困惑,因为我希望实现NUXT的类隐式地知道asyncData签名。
implements
不会推断已实现方法的类型。只能强制兼容注释。这是通过TypeScript设计的。
我指的是Promise <{用户:任何;类别:任何; }>返回将符合Promise的要求,对吧?
是的。但是,打字稿不能推断返回类型的泛型。以下是该错误的简化版本:
export interface NUXT {
foo<T>(): Promise<T>
}
export default class App implements NUXT {
foo(): Promise<null> { // null is not assignable to type T
return Promise.resolve(null);
}
}