最近在用 vue3 开发项目,但是我对 typescript 不太熟悉,麻烦各位大佬提供些思路,我快要被这个类型定义搞疯了。。。
下面是我想要抽成 hook 的代码。
const refreshing = ref(false)
const loading = ref(false)
const finished = ref(false)
const pageData = ref<BaseResponsePageInfo>()
const data= ref<IData[]>([])
const queryParams = ref<IQuery>({
pageNum: 10,
pageSize: 1
})
// 获取数据
async function fetchData() {
try {
loading.value = true
const { list, ...pageInfo } = await getList(queryParams.value)
pageData.value = pageInfo
if (refreshing.value) {
data.value = list
} else {
data.value = data.value.concat(list)
}
if (pageInfo.isLastPage) {
finished.value = true
}
} finally {
loading.value = false
refreshing.value = true
}
}
// 刷新
function onRefresh() {
refreshing.value = true
console.log('onRefresh');
fetchData()
}
// 加载
function onLoad() {
loading.value = true
console.log('onLoad');
fetchData()
}
这是 API 定义:
export const getList = async (params: IQuery): Promise<BaseResponse<IData>> => await http.get('/list', {params})
这是我定义的类型:
interface BaseResponsePageInfo {
total: number
pageNum: number
pageSize: number
size: number
nextPage: number
isFirstPage: boolean
isLastPage: boolean
}
interface BaseResponse<T> extends BaseResponsePageInfo {
list: T[]
}
interface BaseQueryParams {
pageNum: number
pageSize: number
orderBy?: string
}
根据采纳答案可以正常使用,但是会有下面的类型提示,在文件顶部加上// @ts-nocheck
可以忽略类型提示
使用: