From c918f4c3a2ac6c1afdeae74228ab32cdeb281674 Mon Sep 17 00:00:00 2001 From: Noel Date: Fri, 5 Nov 2021 20:27:03 -0700 Subject: [PATCH 1/2] Make `arg` function more type-safe --- index.d.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index 09c3a98..55243d3 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,11 +1,23 @@ declare const flagSymbol: unique symbol; declare function arg( - spec: T, + spec: arg.SpecToMap, options?: arg.Options ): arg.Result; declare namespace arg { + type AddDashesToArg = T extends string + ? `--${T}` + : T extends `--${infer K}` + ? K + : never; + + type SpecToMap = T extends arg.Spec + ? { + [K in keyof T as AddDashesToArg]: T[K]; + } + : never; + export function flag(fn: T): T & { [flagSymbol]: true }; export const COUNT: Handler & { [flagSymbol]: true }; From 97c7ec150876476967c0c4bfc4a6d354a62063e1 Mon Sep 17 00:00:00 2001 From: Noel Date: Fri, 5 Nov 2021 20:35:19 -0700 Subject: [PATCH 2/2] support single dashes --- index.d.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/index.d.ts b/index.d.ts index 55243d3..5886c44 100644 --- a/index.d.ts +++ b/index.d.ts @@ -10,6 +10,8 @@ declare namespace arg { ? `--${T}` : T extends `--${infer K}` ? K + : T extends `-${infer K}` + ? K : never; type SpecToMap = T extends arg.Spec