6

td;dr 如何在已经使用 TypeScript 的项目中包含 vue-apollo?

我使用 vue cli@3 和 TS 创建了一个新的 vue 项目。

然后我添加了vue-apollo修改我的 main.ts 文件的插件来添加

apolloProvider: createProvider(),

在 vue 实例创建中。

但是编译器对此抱怨。

'{ router: VueRouter; 类型的参数 商店:商店<{}>;apolloProvider: { 提供: () => {}; }; 渲染:(h:CreateElement)=> VNode;}' 不可分配给“ComponentOptions、DefaultMethods、DefaultComputed、PropsDefinition>、Record>”类型的参数。

对象字面量只能指定已知属性,并且在类型“ComponentOptions、DefaultMethods、DefaultComputed、PropsDefinition>、Record>”中不存在“apolloProvider”。[2345]

我可以看到我从 npm 获取的 vue-apollo 包中有一个 types 目录,但不知道如何使用它们。

我也得到以下

[ts] 找不到模块“@/vue-apollo”的声明文件。'/Users/praveen/code/voicezen/repos/voicezen-ui/src/vue-apollo.js' 隐含了一个 'any' 类型。[7016]

用于 main.ts 中的以下导入

import { createProvider } from '@/vue-apollo';

我知道这可能来自noImplicitAny规则,但是将生成的vue-apollo.js 更改vue-apollo.ts也不能解决问题。

将其更改为.ts从 main.ts 中删除关于上述两个的编译器错误,但随后我得到以下信息。

找不到模块“vue-cli-plugin-apollo/graphql-client”的声明文件。'/Users/praveen/code/voicezen/repos/voicezen-ui/node_modules/vue-cli-plugin-apollo/graphql-client/index.js' 隐含了一个 'any' 类型。

为了

import {
  createApolloClient,
  restartWebsockets
} from 'vue-cli-plugin-apollo/graphql-client';

为了解决这个问题,我可以像这样在我的类型中添加一个模块声明,但这是正确的方法吗?

declare module 'vue-cli-plugin-apollo/graphql-client';

生成的onLoginoronLogout方法 param开始抱怨它们也是隐式类型。apolloClientvue-apollo.tsany

4

1 回答 1

1

你在正确的轨道上,vue-apollo.js改为.ts

然后将 'vue-cli-plugin-apollo' 添加到 'tsconfig.

于 2019-10-01T12:37:40.857 回答