From 71a753f323dbca21087511dcfeb0c9225b01c579 Mon Sep 17 00:00:00 2001 From: Soybean Date: Wed, 24 Aug 2022 19:21:22 +0800 Subject: [PATCH] =?UTF-8?q?build(projects):=20=E5=BC=95=E5=85=A5TS?= =?UTF-8?q?=E9=AB=98=E7=BA=A7=E7=B1=BB=E5=9E=8B=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/typings/utils.d.ts | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/package.json b/package.json index 06272418..1d935fe2 100644 --- a/package.json +++ b/package.json @@ -109,6 +109,7 @@ "unplugin-icons": "^0.14.8", "unplugin-vue-components": "0.22.4", "unplugin-vue-define-options": "^0.10.0", + "utility-types": "^3.10.0", "vite": "^3.0.9", "vite-plugin-compression": "^0.5.1", "vite-plugin-html": "^3.2.0", diff --git a/src/typings/utils.d.ts b/src/typings/utils.d.ts index 9eba0802..ed3d8751 100644 --- a/src/typings/utils.d.ts +++ b/src/typings/utils.d.ts @@ -10,4 +10,14 @@ declare namespace TypeUtil { type FirstOfArray = T extends [infer First, ...infer _Rest] ? First : never; type LastOfArray = T extends [...infer _Rest, infer Last] ? Last : never; + + // union to tuple + type Union2IntersectionFn = (T extends unknown ? (k: () => T) => void : never) extends (k: infer R) => void + ? R + : never; + type GetUnionLast = Union2IntersectionFn extends () => infer I ? I : never; + + type UnionToTuple = [T] extends [never] + ? R + : UnionToTuple>, [GetUnionLast, ...R]>; }