初次接触uniappX的uts强类型语法,在类型转换上面遇到很多问题,以下是我
页面A:https.uts
通用的api远程调用的公共方法
const BASE_URL: string = "http://0.0.0.0/"
function request(url: string, data: any = {}, method: string = 'GET'): Promise<any> {
return new Promise((resolve, reject) => {
uni.request({
url: BASE_URL + url,
data: data,
method: method,
success: (res) => {
resolve(res)
},
fail: (err: any) => {
reject(err)
}
})
})
}
export function get(url: string, data: any = {}): Promise<any> {
return request(url, data, 'GET')
}
export function post(url: string, data: any = {}): Promise<any> {
return request(url, data, 'POST')
}
页面B:userApi.uts
用户模块的api方法(引入https.uts)
import { get, post } from './https.uts'
type Data = {
member_id: number;
username: string;
password: string;
balance: string;
gender: string;
reg_time: string;
}
type IRootType = {
code: number;
msg: string;
data: Data[]
}
export class UserApi {
static async getAllUsers():Promise<IRootType>{
let res = await get('member/getall');
let result = res as IRootType
console.log(result.msg)
return result
}
}
运行报错内容为:
error: java.lang.ClassCastException: uts.sdk.modules.DCloudUniNetwork.RequestSuccess cannot be cast to IRootType
意思是无法将RequestSuccess 转换为自定义类型IRootType类型。
经过分析:页面B的 这段代码是可以获取到数据的
let res = await get('member/getall');
获取到的内容如下:
20:46:52.398 [uts.sdk.modules.DCloudUniNetwork.RequestSuccess] {cookies: [Array] [ ... ], data: {...}, header: {...}, statusCode: 200} at api/userApi.uts:23
所以请问各位老师,这种RequestSuccess 到底如何才能转换成IRootType类型呢?
1 个回复
DCloud_Android_DQQ
你的用法不对,具体参考这个示例:https://gitcode.com/dcloud/hello-uni-app-x/blob/alpha/pages/API/request/requestTask.uvue