From 10ed7babcc512e7d4c0b65c3261e20c25d137d85 Mon Sep 17 00:00:00 2001 From: Christopher Deutsch Date: Wed, 19 Jun 2019 16:12:25 -0500 Subject: [PATCH 1/5] Fix types. We need to return different versions of `ParsedQuery` based on the values of `parseBooleans` and `parseNumbers`. Fixes #184 --- index.d.ts | 17 ++++++++++++++++- index.test-d.ts | 7 +++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/index.d.ts b/index.d.ts index 4b97e1f9..68bef77d 100644 --- a/index.d.ts +++ b/index.d.ts @@ -90,7 +90,19 @@ export interface ParseOptions { } export interface ParsedQuery { - readonly [key: string]: string | number | boolean | Array | null | undefined; + [key: string]: string | Array | null | undefined; +} + +export interface ParsedQueryWithBooleans { + [key: string]: string | boolean | Array | null | undefined; +} + +export interface ParsedQueryWithNumbers { + [key: string]: string | number | Array | null | undefined; +} + +export interface ParsedQueryWithBooleansAndNumbers { + [key: string]: string | number | boolean | Array | null | undefined; } /** @@ -100,6 +112,9 @@ The returned object is created with [`Object.create(null)`](https://developer.mo @param query - The query string to parse. */ +export function parse(query: string, options: { parseBooleans: true, parseNumbers: true } & ParseOptions): ParsedQueryWithBooleansAndNumbers; +export function parse(query: string, options: { parseBooleans: true } & ParseOptions): ParsedQueryWithBooleans; +export function parse(query: string, options: { parseNumbers: true } & ParseOptions): ParsedQueryWithNumbers; export function parse(query: string, options?: ParseOptions): ParsedQuery; export interface ParsedUrl { diff --git a/index.test-d.ts b/index.test-d.ts index b3f9bb47..099e9cf3 100644 --- a/index.test-d.ts +++ b/index.test-d.ts @@ -51,12 +51,15 @@ expectType( expectType( queryString.parse('?foo=bar', {arrayFormat: 'comma'}) ); -expectType( +expectType( queryString.parse('?foo=1', {parseNumbers: true}) ); -expectType( +expectType( queryString.parse('?foo=true', {parseBooleans: true}) ); +expectType( + queryString.parse('?foo=true', {parseBooleans: true, parseNumbers: true}) +); // Parse URL expectType(queryString.parseUrl('?foo=bar')); From 021feb3a896c8d472aa2d26a310e529ea361d7ce Mon Sep 17 00:00:00 2001 From: Sindre Sorhus Date: Thu, 20 Jun 2019 13:40:12 +0700 Subject: [PATCH 2/5] Update index.d.ts --- index.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.d.ts b/index.d.ts index 68bef77d..8ba10124 100644 --- a/index.d.ts +++ b/index.d.ts @@ -112,9 +112,9 @@ The returned object is created with [`Object.create(null)`](https://developer.mo @param query - The query string to parse. */ -export function parse(query: string, options: { parseBooleans: true, parseNumbers: true } & ParseOptions): ParsedQueryWithBooleansAndNumbers; -export function parse(query: string, options: { parseBooleans: true } & ParseOptions): ParsedQueryWithBooleans; -export function parse(query: string, options: { parseNumbers: true } & ParseOptions): ParsedQueryWithNumbers; +export function parse(query: string, options: {parseBooleans: true, parseNumbers: true} & ParseOptions): ParsedQueryWithBooleansAndNumbers; +export function parse(query: string, options: {parseBooleans: true} & ParseOptions): ParsedQueryWithBooleans; +export function parse(query: string, options: {parseNumbers: true} & ParseOptions): ParsedQueryWithNumbers; export function parse(query: string, options?: ParseOptions): ParsedQuery; export interface ParsedUrl { From 1baf0fea27c36cf4d8cb0b386748b8224fd59f9f Mon Sep 17 00:00:00 2001 From: Sindre Sorhus Date: Thu, 20 Jun 2019 13:41:27 +0700 Subject: [PATCH 3/5] Update index.d.ts --- index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index 8ba10124..f10897fd 100644 --- a/index.d.ts +++ b/index.d.ts @@ -90,7 +90,7 @@ export interface ParseOptions { } export interface ParsedQuery { - [key: string]: string | Array | null | undefined; + [key: string]: string | string[] | null | undefined; } export interface ParsedQueryWithBooleans { From d2624f2f965b0ed6a96fdb823477047701b4ce51 Mon Sep 17 00:00:00 2001 From: Christopher Deutsch Date: Thu, 20 Jun 2019 09:13:35 -0500 Subject: [PATCH 4/5] Make `ParsedQuery` accept generic types instead of having 4 different interfaces. --- index.d.ts | 22 +++++----------------- index.test-d.ts | 6 +++--- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/index.d.ts b/index.d.ts index f10897fd..216b44c9 100644 --- a/index.d.ts +++ b/index.d.ts @@ -89,20 +89,8 @@ export interface ParseOptions { readonly parseBooleans?: boolean; } -export interface ParsedQuery { - [key: string]: string | string[] | null | undefined; -} - -export interface ParsedQueryWithBooleans { - [key: string]: string | boolean | Array | null | undefined; -} - -export interface ParsedQueryWithNumbers { - [key: string]: string | number | Array | null | undefined; -} - -export interface ParsedQueryWithBooleansAndNumbers { - [key: string]: string | number | boolean | Array | null | undefined; +export interface ParsedQuery { + [key: string]: T | Array | null | undefined; } /** @@ -112,9 +100,9 @@ The returned object is created with [`Object.create(null)`](https://developer.mo @param query - The query string to parse. */ -export function parse(query: string, options: {parseBooleans: true, parseNumbers: true} & ParseOptions): ParsedQueryWithBooleansAndNumbers; -export function parse(query: string, options: {parseBooleans: true} & ParseOptions): ParsedQueryWithBooleans; -export function parse(query: string, options: {parseNumbers: true} & ParseOptions): ParsedQueryWithNumbers; +export function parse(query: string, options: {parseBooleans: true, parseNumbers: true} & ParseOptions): ParsedQuery; +export function parse(query: string, options: {parseBooleans: true} & ParseOptions): ParsedQuery; +export function parse(query: string, options: {parseNumbers: true} & ParseOptions): ParsedQuery; export function parse(query: string, options?: ParseOptions): ParsedQuery; export interface ParsedUrl { diff --git a/index.test-d.ts b/index.test-d.ts index 099e9cf3..11e15c89 100644 --- a/index.test-d.ts +++ b/index.test-d.ts @@ -51,13 +51,13 @@ expectType( expectType( queryString.parse('?foo=bar', {arrayFormat: 'comma'}) ); -expectType( +expectType>( queryString.parse('?foo=1', {parseNumbers: true}) ); -expectType( +expectType>( queryString.parse('?foo=true', {parseBooleans: true}) ); -expectType( +expectType>( queryString.parse('?foo=true', {parseBooleans: true, parseNumbers: true}) ); From 018abb3be8cd3f2d58877bd32f6cc58287a709b7 Mon Sep 17 00:00:00 2001 From: Sindre Sorhus Date: Thu, 20 Jun 2019 22:06:18 +0700 Subject: [PATCH 5/5] Update index.d.ts --- index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index 216b44c9..a5bd661c 100644 --- a/index.d.ts +++ b/index.d.ts @@ -90,7 +90,7 @@ export interface ParseOptions { } export interface ParsedQuery { - [key: string]: T | Array | null | undefined; + [key: string]: T | T[] | null | undefined; } /**