Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

求求你们加强对TS的支持吧 #3009

Closed
Iongtao opened this issue Nov 20, 2021 · 20 comments
Closed

求求你们加强对TS的支持吧 #3009

Iongtao opened this issue Nov 20, 2021 · 20 comments
Labels
enhancement New feature or request

Comments

@Iongtao
Copy link

Iongtao commented Nov 20, 2021

新功能描述
很多api的ts支持真的好差啊 虽然说vue3比vue2时候好了一些吧 但还是好差

现状及问题
image
文档注释是这样的
image
request请求也不支持promise

尝试方案
官网上都写了对promise的支持 结果ts不支持
真的对我们写ts的人来说好心累

补充信息
[其它你认为有参考价值的信息]

@Iongtao Iongtao added the enhancement New feature or request label Nov 20, 2021
@Iongtao
Copy link
Author

Iongtao commented Nov 20, 2021

隔壁taro对ts支持就好太多了 去偷点Types过来呀

@WindRunnerMax
Copy link

还有uni很多Api调用支持Promise写法,但是d.ts没声明,只能写回调。。。

@JesseCheng77
Copy link

唉,vue和uni-app对ts支持太糟糕了,到了vue3也还是有痛点

@hairyf
Copy link

hairyf commented Dec 2, 2021

😕 可是 request 返回的就是 task 阿

@sonofmagic
Copy link

2023年了,现在版本的 uni-app 还是没有对 types 里,原先的回调函数进行重载,返回 promise 类型,依旧还是一个大大的 void

导致:

const [err, res] = await uni.showModal

这种全部报错

@StrivingRabbit
Copy link
Collaborator

StrivingRabbit commented Feb 13, 2023

关于api 的 Promise 化类型提示。除 uni.request 有返回值同步的方法(即以 sync 结束)以 create 开头的方法以 manager 结束的方法返回 task 的 api 暂不处理外,其他可以升级 @dcloudio/[email protected] 试试看

@sonofmagic
Copy link

sonofmagic commented Feb 13, 2023

uni.showModal

我升级到了 @dcloudio/[email protected] 有个问题哈,现在 API Promise 化,调用结果在 vue2 和 vue3 是不同的

在 Vue3 中,处理 API Promise 化 调用结果的方式不同于 Vue2。更多

Vue3 中,调用成功会进入 then 方法,调用失败会进入 catch 方法
Vue2 中,调用无论成功还是失败,都会进入 then 方法,返回数据的第一个参数是错误对象,第二个参数是返回数据

详见 https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html#api-promise-%E5%8C%96-%E8%B0%83%E7%94%A8%E7%BB%93%E6%9E%9C%E7%9A%84%E6%96%B9%E5%BC%8F

@dcloudio/[email protected] 这个版本在 vue3 项目下是好的,vue2就不行:

vue2 项目:

image

vue3 项目:

image

是不是应该给这个包打个 tag 来区别 vue2 还是 vue3 的 dts ?

@dcloudio/uvm

另外其实我每次通过 npx @dcloudio/uvm [alpha] 升级包的时候

总是会降低 @dcloudio/types 的版本,而且还会装一个 flyio ,这个弄得很烦

另外我经常出来让我安装新版本 npx @dcloudio/uvm 的提示,结果执行之后,发现没有那个版本执行失败

是不是发布之后,包没有同步到 npmmirror 上呀?

@StrivingRabbit
Copy link
Collaborator

@sonofmagic 关于 vue2 可以参考文档 处理,后续也会发布 vue2 的 api promise 处理

@ModyQyW
Copy link

ModyQyW commented Feb 13, 2023

希望官方对社区关注多一些,跟进社区诉求快一些。

附带目前自己的解决方案 @uni-helper/uni-promises@uni-helper/uni-use,希望有所帮助。

@StrivingRabbit
Copy link
Collaborator

@dcloudio/[email protected] 已发布:
支持 connectSocket、request、uploadFile、downloadFile API 的 Promise 化 ts 提示

关于 vue2 可以参考文档 处理,后续也会发布 vue2 的 api promise 处理

@dong-hx
Copy link

dong-hx commented Apr 8, 2023

@dcloudio/[email protected] 已发布: 支持 connectSocket、request、uploadFile、downloadFile API 的 Promise 化 ts 提示

关于 vue2 可以参考文档 处理,后续也会发布 vue2 的 api promise 处理

使用ts定义request的返回值类型还是会有不准确的问题啊

@zhetengbiji
Copy link
Collaborator

@dcloudio/[email protected] 已发布: 支持 connectSocket、request、uploadFile、downloadFile API 的 Promise 化 ts 提示

关于 vue2 可以参考文档 处理,后续也会发布 vue2 的 api promise 处理

使用ts定义request的返回值类型还是会有不准确的问题啊

具体讲一下

@luokang2015
Copy link

luokang2015 commented May 11, 2023

@dcloudio/[email protected] 已发布: 支持 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实在是太烂了,没有更好的处理方案
}
})
})

@StrivingRabbit
Copy link
Collaborator

@dcloudio/[email protected] 已发布: 支持 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

@luokang2015
Copy link

luokang2015 commented May 11, 2023

@dcloudio/[email protected] 已发布: 支持 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

@Megasu
Copy link

Megasu commented May 12, 2023

持续关注该问题。👀

@StrivingRabbit
Copy link
Collaborator

@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()

uni.promisify.adaptor.js.zip

@luokang2015
Copy link

@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()

uni.promisify.adaptor.js.zip

1683885104995
HBuilderx自己推断的类型是这个,

@StrivingRabbit
Copy link
Collaborator

在 hx 中用的啊,那升级 hx 到 3.8.2 试试看

@luokang2015
Copy link

在 hx 中用的啊,那升级 hx 到 3.8.2 试试看

哈哈,那算了,等正式版再升级,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests