Closed Iongtao closed 1 year ago
隔壁taro对ts支持就好太多了 去偷点Types过来呀
还有uni
很多Api
调用支持Promise
写法,但是d.ts
没声明,只能写回调。。。
唉,vue和uni-app对ts支持太糟糕了,到了vue3也还是有痛点
😕 可是 request 返回的就是 task 阿
2023年了,现在版本的 uni-app 还是没有对 types 里,原先的回调函数进行重载,返回 promise 类型,依旧还是一个大大的 void
导致:
const [err, res] = await uni.showModal
这种全部报错
关于api 的 Promise 化类型提示。除 uni.request 有返回值
、同步的方法(即以 sync 结束)
、以 create 开头的方法
、以 manager 结束的方法
、返回 task 的 api
暂不处理外,其他可以升级 @dcloudio/types@3.3.0 试试看
uni.showModal
我升级到了 @dcloudio/types@3.3.0
有个问题哈,现在 API Promise 化,调用结果在 vue2 和 vue3 是不同的
在 Vue3 中,处理 API Promise 化 调用结果的方式不同于 Vue2。更多
Vue3 中,调用成功会进入 then 方法,调用失败会进入 catch 方法 Vue2 中,调用无论成功还是失败,都会进入 then 方法,返回数据的第一个参数是错误对象,第二个参数是返回数据
@dcloudio/types@3.3.0
这个版本在 vue3 项目下是好的,vue2就不行:
是不是应该给这个包打个 tag 来区别 vue2 还是 vue3 的 dts ?
另外其实我每次通过 npx @dcloudio/uvm [alpha] 升级包的时候
总是会降低 @dcloudio/types
的版本,而且还会装一个 flyio
,这个弄得很烦
另外我经常出来让我安装新版本 npx @dcloudio/uvm 的提示,结果执行之后,发现没有那个版本执行失败
是不是发布之后,包没有同步到 npmmirror 上呀?
@sonofmagic 关于 vue2 可以参考文档 处理,后续也会发布 vue2 的 api promise 处理
希望官方对社区关注多一些,跟进社区诉求快一些。
附带目前自己的解决方案 @uni-helper/uni-promises 和 @uni-helper/uni-use,希望有所帮助。
@dcloudio/types@3.3.1 已发布:
支持 connectSocket、request、uploadFile、downloadFile
API 的 Promise 化 ts 提示
关于 vue2 可以参考文档 处理,后续也会发布 vue2 的 api promise 处理
@dcloudio/types@3.3.1 已发布: 支持
connectSocket、request、uploadFile、downloadFile
API 的 Promise 化 ts 提示关于 vue2 可以参考文档 处理,后续也会发布 vue2 的 api promise 处理
使用ts定义request的返回值类型还是会有不准确的问题啊
@dcloudio/types@3.3.1 已发布: 支持
connectSocket、request、uploadFile、downloadFile
API 的 Promise 化 ts 提示关于 vue2 可以参考文档 处理,后续也会发布 vue2 的 api promise 处理
使用ts定义request的返回值类型还是会有不准确的问题啊
具体讲一下
@dcloudio/types@3.3.1 已发布: 支持 API 的 Promise 化 ts 提示
connectSocket、request、uploadFile、downloadFile
关于 vue2 可以参考文档 处理,后续也会发布 vue2 的 API promise 处理
使用ts定义request的返回值类型还是会有不准确的问题啊
具体讲一下
await uni.request({ url: 'https://fc-mp-8ba27ec2-89fd-48c2-ba92-9c9aca.next.bspapp.com/api/user/getU' }) 请求云对象url化,ts推断返回的是RequestTask类型,不能使用await,虽然这个api不使用success就promise化了,所以我不得不使用await new Promise((resolve)=>{ uni.request({ success: (res)=>{ reslove(res.data as Type) //我的ts实在是太烂了,没有更好的处理方案 } }) })
@dcloudio/types@3.3.1 已发布: 支持 API 的 Promise 化 ts 提示
connectSocket、request、uploadFile、downloadFile
关于 vue2 可以参考文档 处理,后续也会发布 vue2 的 API promise 处理
使用ts定义request的返回值类型还是会有不准确的问题啊
具体讲一下
await uni.request({ url: 'https://fc-mp-8ba27ec2-89fd-48c2-ba92-9c9aca.next.bspapp.com/api/user/getU' }) 请求云对象url化,ts推断返回的是RequestTask类型,不能使用await,虽然这个api不使用success就promise化了,所以我不得不使用await new Promise((resolve)=>{ uni.request({ success: (res)=>{ reslove(res.data as Type) //我的ts实在是太烂了,没有更好的处理方案 } }) })
你使用的 @dcloudio/types 是什么版本?如果没有传 success 返回应该是 Promise
@dcloudio/types@3.3.1 已发布: 支持 API 的 Promise 化 ts 提示
connectSocket、request、uploadFile、downloadFile
关于 vue2 可以参考文档 处理,后续也会发布 vue2 的 API promise 处理
使用ts定义request的返回值类型还是会有不准确的问题啊
具体讲一下
await uni.request({ url: 'https://fc-mp-8ba27ec2-89fd-48c2-ba92-9c9aca.next.bspapp.com/api/user/getU' }) 请求云对象url化,ts推断返回的是RequestTask类型,不能使用await,虽然这个api不使用success就promise化了,所以我不得不使用await new Promise((resolve)=>{ uni.request({ success: (res)=>{ reslove(res.data as Type) //我的ts实在是太烂了,没有更好的处理方案 } }) })
你使用的 @dcloudio/types 是什么版本?如果没有传 success 返回应该是 Promise
"@dcloudio/types": "^3.3.3",已经是最新版本的。当然没有传success这类参数的,ts自动推断的类型是RequestTask
持续关注该问题。👀
@luokang2015 @Megasu
将附件中的 js 文件放到项目根目录,然后在 main.js
中这样使用即可:
import App from './App'
import Vue from 'vue'
import './uni.promisify.adaptor' // Look here
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
@luokang2015 @Megasu
将附件中的 js 文件放到项目根目录,然后在
main.js
中这样使用即可:import App from './App' import Vue from 'vue' import './uni.promisify.adaptor' // Look here Vue.config.productionTip = false App.mpType = 'app' const app = new Vue({ ...App }) app.$mount()
HBuilderx自己推断的类型是这个,
在 hx 中用的啊,那升级 hx 到 3.8.2 试试看
在 hx 中用的啊,那升级 hx 到 3.8.2 试试看
哈哈,那算了,等正式版再升级,
新功能描述 很多api的ts支持真的好差啊 虽然说vue3比vue2时候好了一些吧 但还是好差
现状及问题 文档注释是这样的 request请求也不支持promise
尝试方案 官网上都写了对promise的支持 结果ts不支持 真的对我们写ts的人来说好心累
补充信息 [其它你认为有参考价值的信息]