@@ -29,7 +29,6 @@ import {
29
29
emptyArray ,
30
30
endsWith ,
31
31
ensureTrailingDirectorySeparator ,
32
- every ,
33
32
Expression ,
34
33
extend ,
35
34
Extension ,
@@ -2974,7 +2973,7 @@ function parseJsonConfigFileContentWorker(
2974
2973
} ;
2975
2974
2976
2975
function getConfigFileSpecs ( ) : ConfigFileSpecs {
2977
- const referencesOfRaw = getPropFromRaw < ProjectReference > ( "references" , element => typeof element === "object" , "object" ) ;
2976
+ const referencesOfRaw = getPropFromRaw ( "references" , ( element ) : element is ProjectReference => ! ! element && typeof element === "object" , "object" ) ;
2978
2977
const filesSpecs = toPropValue ( getSpecsFromRaw ( "files" ) ) ;
2979
2978
if ( filesSpecs ) {
2980
2979
const hasZeroOrNoReferences = referencesOfRaw === "no-prop" || isArray ( referencesOfRaw ) && referencesOfRaw . length === 0 ;
@@ -3049,7 +3048,7 @@ function parseJsonConfigFileContentWorker(
3049
3048
3050
3049
function getProjectReferences ( basePath : string ) : readonly ProjectReference [ ] | undefined {
3051
3050
let projectReferences : ProjectReference [ ] | undefined ;
3052
- const referencesOfRaw = getPropFromRaw < ProjectReference > ( "references" , element => typeof element === "object" , "object" ) ;
3051
+ const referencesOfRaw = getPropFromRaw ( "references" , ( element ) : element is ProjectReference => ! ! element && typeof element === "object" , "object" ) ;
3053
3052
if ( isArray ( referencesOfRaw ) ) {
3054
3053
for ( const ref of referencesOfRaw ) {
3055
3054
if ( typeof ref . path !== "string" ) {
@@ -3077,11 +3076,12 @@ function parseJsonConfigFileContentWorker(
3077
3076
return getPropFromRaw ( prop , isString , "string" ) ;
3078
3077
}
3079
3078
3080
- function getPropFromRaw < T > ( prop : "files" | "include" | "exclude" | "references" , validateElement : ( value : unknown ) => boolean , elementTypeName : string ) : PropOfRaw < T > {
3079
+ function getPropFromRaw < T > ( prop : "files" | "include" | "exclude" | "references" , validateElement : ( value : unknown ) => value is T , elementTypeName : string ) : PropOfRaw < T > {
3081
3080
if ( hasProperty ( raw , prop ) && ! isNullOrUndefined ( raw [ prop ] ) ) {
3082
- if ( isArray ( raw [ prop ] ) ) {
3083
- const result = raw [ prop ] as T [ ] ;
3084
- if ( ! sourceFile && ! every ( result , validateElement ) ) {
3081
+ const value = raw [ prop ] ;
3082
+ if ( isArray ( value ) ) {
3083
+ const result = filter ( value , validateElement ) ;
3084
+ if ( ! sourceFile && result . length !== value . length ) {
3085
3085
errors . push ( createCompilerDiagnostic ( Diagnostics . Compiler_option_0_requires_a_value_of_type_1 , prop , elementTypeName ) ) ;
3086
3086
}
3087
3087
return result ;
0 commit comments