@@ -49,30 +49,39 @@ export function hasEnvironmentVariable(variable: string): boolean {
49
49
}
50
50
51
51
/* prettier-ignore */
52
- export function getEnvironmentVariable ( variable : string , options ?: { strict ?: false } ) : EnvironmentVariableValue | undefined ;
53
- export function getEnvironmentVariable ( variable : string , options : { strict : true } ) : EnvironmentVariableValue ;
54
- export function getEnvironmentVariable (
52
+ export function getEnvironmentVariable < ValueType extends EnvironmentVariableValue > ( variable : string , options ?: { strict ?: false } ) : ValueType | undefined ;
53
+ /* prettier-ignore */
54
+ export function getEnvironmentVariable < ValueType extends EnvironmentVariableValue > ( variable : string , options : { strict : true } ) : ValueType ;
55
+ export function getEnvironmentVariable < ValueType extends EnvironmentVariableValue > (
55
56
variable : string ,
56
57
options : EnvironmentVariableOptions = { } ,
57
- ) : EnvironmentVariableValue | undefined {
58
+ ) : ValueType | undefined {
58
59
const { strict = false } = options ;
59
60
60
61
const value = toMap ( getEnvironmentVariables ( ) ) . get ( variable ) ;
61
62
62
63
if ( value ) {
63
- return parseEnvironmentVariableValue ( value ) ;
64
+ return parseEnvironmentVariableValue ( value ) as ValueType ;
64
65
} else if ( strict ) {
65
66
throw new RuntimeError ( `The environment variable - "${ variable } " - is not set. Getter aborted.` ) ;
66
67
}
67
68
}
68
69
69
- function parseEnvironmentVariableValue ( value : EnvironmentVariableValue ) {
70
- if ( value === "true" ) return true ;
71
- else if ( value === "false" ) return false ;
70
+ type ParsedEnvVariableValue < Value extends string > = Value extends "true"
71
+ ? true
72
+ : Value extends "false"
73
+ ? false
74
+ : Value extends `${number } `
75
+ ? number
76
+ : string ;
77
+
78
+ function parseEnvironmentVariableValue < Value extends string > ( value : Value ) : ParsedEnvVariableValue < Value > {
79
+ if ( value === "true" ) return true as ParsedEnvVariableValue < Value > ;
80
+ else if ( value === "false" ) return false as ParsedEnvVariableValue < Value > ;
72
81
else {
73
82
const asNumber = Number ( value ) ;
74
83
75
- return Number . isNaN ( asNumber ) ? value : asNumber ;
84
+ return ( Number . isNaN ( asNumber ) ? value : asNumber ) as ParsedEnvVariableValue < Value > ;
76
85
}
77
86
}
78
87
0 commit comments