Skip to content

Commit af048cb

Browse files
authored
Merge pull request #151 from laughinghan/master
Fix type inference for output: 'array' when precision is configured
2 parents 04542c6 + 1fd54d9 commit af048cb

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

filesize.d.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ declare namespace Filesize {
109109
}
110110

111111
// Result type inference from the output option
112-
interface ResultTypeMap {
113-
array: [number, string];
112+
interface ResultTypeMap<O> {
113+
array: [O extends {precision: number} ? string : number, string];
114114
exponent: number;
115115
object: {
116116
value: number,
@@ -120,12 +120,12 @@ declare namespace Filesize {
120120
};
121121
string: string;
122122
}
123-
type DefaultOutput<O extends Options> = Exclude<O["output"], keyof ResultTypeMap> extends never ? never : "string"
124-
type CanonicalOutput<O extends Options> = Extract<O["output"], keyof ResultTypeMap> | DefaultOutput<O>
123+
type DefaultOutput<O extends Options> = Exclude<O["output"], keyof ResultTypeMap<O>> extends never ? never : "string"
124+
type CanonicalOutput<O extends Options> = Extract<O["output"], keyof ResultTypeMap<O>> | DefaultOutput<O>
125125

126126
interface Filesize {
127127
(bytes: number): string;
128-
<O extends Options>(bytes: number, options: O): ResultTypeMap[CanonicalOutput<O>];
129-
partial: <O extends Options>(options: O) => ((bytes: number) => ResultTypeMap[CanonicalOutput<O>]);
128+
<O extends Options>(bytes: number, options: O): ResultTypeMap<O>[CanonicalOutput<O>];
129+
partial: <O extends Options>(options: O) => ((bytes: number) => ResultTypeMap<O>[CanonicalOutput<O>]);
130130
}
131131
}

test/typeinference_test.ts

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import filesize from "../filesize";
88

99
function shouldBeString(x: string) {}
1010
function shouldBeNumberUnitPair(x: [number, string]) {}
11+
function shouldBeStringUnitPair(x: [string, string]) {}
1112
function shouldBeNumber(x: number) {}
1213

1314
type FilesizeObject = {
@@ -28,6 +29,7 @@ shouldBeString(filesize(123, {}));
2829
shouldBeString(filesize(123, { output: undefined }));
2930
shouldBeString(filesize(123, { output: "string" }));
3031
shouldBeNumberUnitPair(filesize(123, { output: "array" }));
32+
shouldBeStringUnitPair(filesize(123, { precision: 2, output: "array" }));
3133
shouldBeNumber(filesize(123, { output: "exponent" }));
3234
shouldBeObject(filesize(123, { output: "object" }));
3335

0 commit comments

Comments
 (0)