typescript - 实现由类实现的接口时出现令人困惑的错误
问题描述
我收到以下错误:
输入 '(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>
,对吧?
解决方案
这让我感到困惑,因为我希望实现 NUXT 的类隐式地知道 asyncData 签名。
implements
不推断实现方法的类型。它只强制注释是兼容的。这是 TypeScript 设计的。
我的意思是 Promise<{ user: any; 类别:任何;}> 返回将符合 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);
}
}
推荐阅读
- python - 神经网络验证准确性有时不会改变
- jquery - 使用自定义 ajax 调用的数据表过滤器中的问题
- javascript - 如何获取数组中的键和值并将其推送到表中
- laravel - 无法删除包 phpoffice/phpword。(laravel 5.2)
- elasticsearch - 如何汇总和分页结果
- java - 没有 XML 文件的 DOM 树数据结构
- flutter - 使用 Navigator 时,如何解决在 null 上调用了“ancestorStateOfType”方法?
- java - 如何让java程序读取它的内部路径以使其在每台PC上工作
- python - 通过 cron 或类似方法在 Python Flask 中触发操作
- jquery - 如何在 django 中使用引导程序制作模态显示