如何在使用 Vue CLI@3 和 TypeScript 设置的项目中使用?

Pra*_*lia 6 typescript vue.js graphql apollo-client vue-apollo

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

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

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

apolloProvider: createProvider(),
Run Code Online (Sandbox Code Playgroud)

在 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';
Run Code Online (Sandbox Code Playgroud)

我知道这可能来自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';
Run Code Online (Sandbox Code Playgroud)

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

declare module 'vue-cli-plugin-apollo/graphql-client';
Run Code Online (Sandbox Code Playgroud)

所述onLoginonLogout方法PARAM apolloClient,在所生成的vue-apollo.ts开始抱怨他们被隐式地any键入太。

dal*_*ore 1

您的方向是正确的,请更改vue-apollo.js.ts

然后将“vue-cli-plugin-apollo”添加到“tsconfig.json”中的类型中。