在 hook
里我想根据是否存入 transformData
函数,自动推导出返回的 tableData
的类型,现在的问题是,当我传入 transformData
时,tableData
的类型是 (T | R)[]
, 如果我不传 transformData
, tableData
的类型是 (T|(R 的默认值))[]
, 如何才能在传入transformData
时 tableData
得到 R[]
, 不传时, tableData
得到 T[]
?
import { GetListFn, PaginationProps, Query } from '@/types/globe'import { sleep } from 'radash'type SetMode = 'reset' | 'append'export default function useTable< T extends Record<string, any> = Record<string, any>, Q extends Record<string, any> | undefined = undefined, R extends Record<string, any> = Record<string, any>>(config: { request: (params: Query<Q>) => Promise<CommonResponse<{ records: T[], total: number }>> search?: Q getListOnMounted?: boolean setMode?: SetMode transformData?: (data: T[]) => R[]}) { type InferItem<T, F> = F extends undefined ? T : R const { request, search = {}, getListOnMounted = true, setMode = 'reset', transformData } = config ... const tableData = ref([]) as Ref<InferItem<T, typeof transformData>[]> const getList = async (config?: { mode: SetMode }) => { ... try { loading.value = true const { ok, data } = await request(query) await sleep(100) if (ok) { const responseData = data.data.records || [] if (responseData.length) { const maybeTransformData = transformData?.(responseData) ?? responseData tableData.value = _mode === 'reset' ? maybeTransformData : [...tableData.value, ...maybeTransformData] } else if (_mode === 'reset') { tableData.value = [] } pagination.total = data.data.total ?? 0 noMoreData.value = !responseData.length || tableData.value.length === pagination.total } } finally { loading.value = false } } ... return { ... tableData, ... }}
这是我的使用方式
const { tableData } = useTable({ request: (params) => receptionist.list(Number(route.params.id), params), search: { keyword: '' }, transformData: (data) => data.map((v) => ({ label: v.receptName, value: v.id }))})
求助各位大佬
declare function f<T extends [] | [number]>(...args: T): T extends [] ? 1 : 2const a = f() // 1const b = f(123) // 2
定义一个枚举,将其中一个取值作为replace方法的第二个参数,这时候会报错,该怎么处理?
在学习ts的类型的时候遇到这个问题,很是迷惑 这里我理解的是判断T是否同时继承类型X,Y,从而判断X,Y是否是同一类型?(这里不理解,假如T是"symbol|number|string",X是"string",Y是:"number",岂不是得出了X与Y相同?) 还有第二个extends看上去像是判断两个数值是否相等的意思?不能用===吗?有点看不懂ts里面的extends
C++是静态语言:所有变量的类型,都会在编译时被准确指定。所以,作为程序员你需要为每个变量指定对应的类型。 有些时候就需要使用一些繁琐类型定义,比如: std::map<std::string,std::unique_ptr<some_data>> m; std::map<std::string,std::unique_ptr<some_data>>::iterator iter=m.
在微信公众号运营体系下,随着小程序的加入,使得微信生态更加全面和动态,小程序可以和服务号、订阅号互相搭配使用,打破公众号粉丝流量变现的瓶颈,通过一定内容(文本消息、图文消息、模版消息)的推送将公众号粉丝转化为品牌关注者、参与者以及最终成为购买者,提升转化。 诸葛io面向微信「公众号+小程序」运营人员推出了基于微信生态下的用户行为大数据运营自动化工具-自动推送,可以帮助企业的公众号、小程序运营和营销
关于TS类型推导中结果中,函数参数的类型问题? 链接在这里:https://tsplay.dev/mxE51W 问题是: 为什么在action中,调用cx('a')的时候,参数类型是never呢? 如何让cx根据传入的泛型T来决定接受的类型呢?
我正在学习自动模板演绎guid:https://en.cppreference.com/w/cpp/language/class_template_argument_deduction.因此我想试试这个。 我有以下嵌套类结构,其中是一个带有非模板参数的模板化类,内部结构只是有一个 我有< code > MyStruct mStruct作为会员: 我想像这样实现或构建My类 因此我给出了如上的演绎g