获得徽章 0
- 突然觉得ts很有意思了,用几个小时研究写出了这个代码,本来js实现,分分钟的事,但是用ts,生成自己想要的提示,很有成就感。
export function GENERATE_OPTION<L, V extends string | number, T extends { [key: string]: { value: V; label: L } }, K extends keyof T>(
statusMap: T,
) {
const getMap = <Prop extends keyof T[keyof T]>(key: Prop) => {
return Object.fromEntries(Object.entries(statusMap).map(([, item]) => [item.value, item[key as keyof typeof item]])) as {
[P in T[keyof T]['value']]: Extract<T[keyof T], { value: P }>[Prop]
} & Record<string, any>
}
return [Object.values(statusMap) as T[K][], getMap, statusMap] as const
}
export const [ORDER_STATUS_OPTION, getOrderMap] = GENERATE_OPTION({
PENDING_SIGNATURE: { value: '0', label: '待签署', tag: 'warning' },
PENDING_PAYMENT: { value: '1', label: '待付款', tag: 'warning' },
ACTIVE: { value: '2', label: '生效中', tag: 'success' },
EXPIRED: { value: '3', label: '已失效', tag: 'danger' },
} as const)展开23
,20w阅读量。