Skip to content

Commit

Permalink
feat(projects): useNaiveTable函数:类型部分
Browse files Browse the repository at this point in the history
  • Loading branch information
honghuangdc committed Jul 27, 2022
1 parent b32bca4 commit 02992dc
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 4 deletions.
4 changes: 2 additions & 2 deletions package.json
Expand Up @@ -52,15 +52,15 @@
"ua-parser-js": "^1.0.2",
"vditor": "^3.8.15",
"vue": "3.2.37",
"vue-router": "^4.1.2",
"vue-router": "^4.1.3",
"wangeditor": "^4.7.15",
"xgplayer": "^2.31.7"
},
"devDependencies": {
"@amap/amap-jsapi-types": "^0.0.8",
"@commitlint/cli": "^17.0.3",
"@commitlint/config-conventional": "^17.0.3",
"@iconify/json": "^2.1.83",
"@iconify/json": "^2.1.84",
"@iconify/vue": "^3.2.1",
"@types/bmapgl": "^0.0.5",
"@types/crypto-js": "^4.1.1",
Expand Down
69 changes: 69 additions & 0 deletions src/hooks/business/useNaiveTable.ts
@@ -0,0 +1,69 @@
import type { DataTableColumn } from 'naive-ui';

type UnionColumn<T> = T extends DataTableColumn[] ? TypeUtil.ArrayToUnion<T> : never;

type ColumnKey = 'key';

type InterfaceArray = {
[key: string]: unknown;
};

type ColumnKeyData = {
key: unknown;
};

type ExcludeArrayByKey<T extends InterfaceArray[]> = T extends [infer First, ...infer Rest]
? First extends ColumnKeyData
? Rest extends InterfaceArray[]
? [First, ...ExcludeArrayByKey<Rest>]
: [First]
: Rest extends InterfaceArray[]
? ExcludeArrayByKey<Rest>
: []
: [];

type GetUnionColumnKey<T extends InterfaceArray[]> = ColumnKey extends keyof UnionColumn<T>
? UnionColumn<T>[ColumnKey]
: never;

export const columns: DataTableColumn[] = [
{
type: 'selection'
},
{
title: 'Name',
key: 'name',
align: 'center'
},
{
title: 'Age',
key: 'age'
},
{
title: 'Address',
key: 'address'
}
];

export type UnionColumnKey = GetUnionColumnKey<
ExcludeArrayByKey<
[
{
type: 'selection';
},
{
title: 'Name';
key: 'name';
align: 'center';
},
{
title: 'Age';
key: 'age';
},
{
title: 'Address';
key: 'address';
}
]
>
>;
14 changes: 14 additions & 0 deletions src/typings/utils.d.ts
@@ -1,7 +1,21 @@
declare namespace TypeUtil {
type Noop = (...args: any) => any;

type UnionInclude<T, K extends keyof T> = K extends keyof T ? true : false;

type GetFunArgs<F extends Noop> = F extends (...args: infer P) => any ? P : never;

type GetFunReturn<F extends Noop> = F extends (...args: any) => infer R ? R : never;

type FirstOfArray<T extends any[]> = T extends [infer First, ...infer _Rest] ? First : never;

type LastOfArray<T extends any[]> = T extends [...infer _Rest, infer Last] ? Last : never;

type ArrayToUnion<T extends any[]> = T extends [infer First, ...infer Rest]
? First extends any
? Rest extends any[]
? FirstOfArray<[First]> | ArrayToUnion<Rest>
: [First]
: never
: never;
}
2 changes: 1 addition & 1 deletion src/views/management/auth/index.vue
Expand Up @@ -2,6 +2,6 @@
<div>权限管理</div>
</template>

<script setup lang="ts"></script>
<script setup lang="tsx"></script>

<style scoped></style>
4 changes: 3 additions & 1 deletion src/views/management/user/index.vue
@@ -1,5 +1,7 @@
<template>
<div>用户管理</div>
<div>
<n-data-table />
</div>
</template>

<script setup lang="ts"></script>
Expand Down

1 comment on commit 02992dc

@vercel
Copy link

@vercel vercel bot commented on 02992dc Jul 27, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.