From 8287192198a14bcb31533afe381aa24ac7eed4c6 Mon Sep 17 00:00:00 2001 From: Jason Killian Date: Wed, 23 Sep 2015 11:58:31 -0400 Subject: [PATCH] Accept arrays and nested arrays as classNames does --- classnames/classnames-tests.ts | 9 ++++++++- classnames/classnames.d.ts | 8 ++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/classnames/classnames-tests.ts b/classnames/classnames-tests.ts index 7b085c4fb..3c3086c51 100644 --- a/classnames/classnames-tests.ts +++ b/classnames/classnames-tests.ts @@ -8,9 +8,16 @@ classNames('foo', 'bar'); // => 'foo bar' classNames('foo', { bar: true }); // => 'foo bar' classNames({ foo: true }, { bar: true }); // => 'foo bar' classNames({ foo: true, bar: true }); // => 'foo bar' +classNames(10, 11); // => '10 11'; // lots of arguments of various types -classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }) // => 'foo bar baz quux' +classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux' + +classNames(['foo', 'bar', 'baz']); // => 'foo bar baz' +classNames([1, 2, 3]); // => '1 2 3' +classNames([{ foo: true, bar: false }, { baz: true }]); // => 'foo baz' + +classNames(["foo", ["bar", {baz: true}]]); // => 'foo bar baz' // other falsy values are just ignored // NOTE: We don't really want to allow this kind of thing with Typescript (otherwise what's the point!) diff --git a/classnames/classnames.d.ts b/classnames/classnames.d.ts index 22ab1858a..58a3e096f 100644 --- a/classnames/classnames.d.ts +++ b/classnames/classnames.d.ts @@ -1,14 +1,18 @@ // Type definitions for classnames // Project: https://github.com/JedWatson/classnames -// Definitions by: Dave Keen , Adi Dahiya +// Definitions by: Dave Keen , Adi Dahiya , Jason Killian // Definitions: https://github.com/borisyankov/DefinitelyTyped +declare type ClassValue = string | number | ClassDictionary | ClassArray; + interface ClassDictionary { [id: string]: boolean; } +interface ClassArray extends Array { } + interface ClassNamesFn { - (...classes: (string | ClassDictionary)[]): string; + (...classes: ClassValue[]): string; } declare var classNames: ClassNamesFn;