diff --git a/index.d.ts b/index.d.ts index 2ba2f25..be8c485 100644 --- a/index.d.ts +++ b/index.d.ts @@ -12,17 +12,17 @@ Callback function to determine if a flag is required during runtime. */ export type IsRequiredPredicate = (flags: Readonly, input: readonly string[]) => boolean; -export interface Flag { +export interface Flag { readonly type?: Type; readonly alias?: string; readonly default?: Default; readonly isRequired?: boolean | IsRequiredPredicate; - readonly isMultiple?: boolean; + readonly isMultiple?: IsMultiple; } -type StringFlag = Flag<'string', string>; -type BooleanFlag = Flag<'boolean', boolean>; -type NumberFlag = Flag<'number', number>; +type StringFlag = Flag<'string', string> | Flag<'string', string[], true>; +type BooleanFlag = Flag<'boolean', boolean> | Flag<'boolean', boolean[], true>; +type NumberFlag = Flag<'number', number> | Flag<'number', number[], true>; type AnyFlag = StringFlag | BooleanFlag | NumberFlag; type AnyFlags = Record; diff --git a/index.test-d.ts b/index.test-d.ts index 28b6098..6e0e848 100644 --- a/index.test-d.ts +++ b/index.test-d.ts @@ -1,6 +1,6 @@ -import {expectAssignable, expectType} from 'tsd'; +import {expectAssignable, expectError, expectType} from 'tsd'; import {PackageJson} from 'type-fest'; -import meow, {Result} from './index.js'; +import meow, {Result, AnyFlag} from './index.js'; const importMeta = import.meta; @@ -24,6 +24,15 @@ expectAssignable<{flags: {foo: string | undefined}}>( expectAssignable<{flags: {foo: boolean | undefined}}>( meow({importMeta, flags: {foo: {type: 'boolean'}}}) ); +expectAssignable<{flags: {foo: number[] | undefined}}>( + meow({importMeta, flags: {foo: {type: 'number', isMultiple: true}}}) +); +expectAssignable<{flags: {foo: string[] | undefined}}>( + meow({importMeta, flags: {foo: {type: 'string', isMultiple: true}}}) +); +expectAssignable<{flags: {foo: boolean[] | undefined}}>( + meow({importMeta, flags: {foo: {type: 'boolean', isMultiple: true}}}) +); expectType>(meow({importMeta, description: 'foo'})); expectType>(meow({importMeta, description: false})); expectType>(meow({importMeta, help: 'foo'})); @@ -79,3 +88,19 @@ const options = { } as const; meow('', options); + +expectAssignable({type: 'string', default: 'cat'}); +expectAssignable({type: 'number', default: 42}); +expectAssignable({type: 'boolean', default: true}); + +expectAssignable({type: 'string', default: undefined}); +expectAssignable({type: 'number', default: undefined}); +expectAssignable({type: 'boolean', default: undefined}); + +expectAssignable({type: 'string', isMultiple: true, default: ['cat']}); +expectAssignable({type: 'number', isMultiple: true, default: [42]}); +expectAssignable({type: 'boolean', isMultiple: true, default: [false]}); + +expectError({type: 'string', isMultiple: true, default: 'cat'}); +expectError({type: 'number', isMultiple: true, default: 42}); +expectError({type: 'boolean', isMultiple: true, default: false});