详细问题描述
(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)
[内容]
使用 vue-cli 创建基于 typescript 项目,默认使用的是 @dcloudio/types 作为类型描述,但是这个类型比较老旧,我看到 dcloud 已经提交类型文件到 DefinitelyTyped ,但是直接使用 @types/uni-app 除了几个小问题 PR #2 ,最大的问题是它不能正确的引入 Vue 的扩展定义。
在 @dcloudio/types 中的 index.d.ts 导入了各个子模块,而在 @types/uni-app 中,index.d.ts 只有 uni 定义,其他在 lib/*.d.ts 都没有被默认包含进来。
我自己对 Declaration Files 不是很熟悉,没有动手去改。我只在生成的工程文件里的 App.vue 里使用了
/// <reference path="../node_modules/@types/uni-app/lib/common.d.ts" />
/// <reference path="../node_modules/@types/uni-app/lib/app.d.ts" />
/// <reference path="../node_modules/@types/uni-app/lib/page.d.ts" />
/// <reference path="../node_modules/@types/uni-app/lib/vue.d.ts" />
来解决 typescript 编译的问题
重现步骤
[步骤]
vue-cli 创建 typescript 项目模板
yarn remove \@dcloudio/types
yarn add \@types/uni-app
yarn build
[结果]
6:3 Argument of type '{ mpType: string; onLaunch(): void; onShow(): void; onHide(): void; }' is not assignable to parameter of type 'ComponentOptions<Vue, DefaultData<Vue>, DefaultMethods<Vue>, DefaultComputed, PropsDefinition<Record<string, any>>, Record<string, any>>'.
Object literal may only specify known properties, and 'mpType' does not exist in type 'ComponentOptions<Vue, DefaultData<Vue>, DefaultMethods<Vue>, DefaultComputed, PropsDefinition<Record<string, any>>, Record<string, any>>'.
4 |
5 | export default Vue.extend({
> 6 | mpType: "app",
| ^
7 | onLaunch() {
8 | console.log("App Launch");
9 | vxm.user.getStoredAccessToken();
[期望]
编译成功
[如果语言难以表述清晰,拍一个视频或截图,有图有真相]
IDE运行环境说明
[HBuilder 或 HBuilderX。如果你用其他工具开发uni-app,也需要在此说明]
yarn -v
1.15.2
[mac版本号]
10.14.2
uni-app运行环境说明
[运行端是h5或app或某个小程序?]
微信小程序
[运行端版本号]
"@dcloudio/uni-mp-weixin@*":
version "0.0.952"
"@dcloudio/vue-cli-plugin-uni@^0.9.462":
version "0.9.462"
"@types/uni-app@^1.0.1":
version "1.0.1"
[项目是cli创建的还是HBuilderX创建的?如果是cli创建的,请更新到最新版cli再试]
cli
[可重现代码片段]
App.vue
<script lang="ts">
/// <reference path="../node_modules/@types/uni-app/lib/common.d.ts" />
/// <reference path="../node_modules/@types/uni-app/lib/app.d.ts" />
/// <reference path="../node_modules/@types/uni-app/lib/page.d.ts" />
/// <reference path="../node_modules/@types/uni-app/lib/vue.d.ts" />
import Vue from "vue";
import { vxm } from "./store";
export default Vue.extend({
mpType: "app",
onLaunch() {
console.log("App Launch");
vxm.user.getStoredAccessToken();
},
onShow() {
console.log("App Show");
},
onHide() {
console.log("App Hide");
}
});
</script>
<style>
@import "colorui/main.css";
@import "colorui/icon.css";
</style>
sprhawk (作者)
我说@dcloudio/types老旧是因为 storage 的几个 api 的参数类型是错误的,而 @types/uni-app是修复的
2019-05-16 14:20
DCloud_UNI_GSQ
回复 sprhawk: 已经修复
2019-05-16 16:24
sprhawk (作者)
回复 DCloud_UNI_GSQ: 嗯,现在用新版本的 @types/uni-app已经 OK 了
2019-06-10 22:24
1***@qq.com
如何更新@dcloudio/types
2020-02-18 03:41