diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index f648bddefe9a7..8b963409ab6ad 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -1607,10 +1607,12 @@ namespace ts { createCompilerDiagnosticOnlyIfJson(Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array"); } } - else { - const outDir = raw.compilerOptions && raw.compilerOptions.outDir; - if (outDir) { - excludeSpecs = [outDir]; + else if (raw.compilerOptions) { + const outDir = raw.compilerOptions.outDir; + const declarationDir = raw.compilerOptions.declarationDir; + + if (outDir || declarationDir) { + excludeSpecs = [outDir, declarationDir].filter(d => !!d); } } diff --git a/src/harness/unittests/tsconfigParsing.ts b/src/harness/unittests/tsconfigParsing.ts index f1b4d5265816b..7a47481b88d3f 100644 --- a/src/harness/unittests/tsconfigParsing.ts +++ b/src/harness/unittests/tsconfigParsing.ts @@ -217,6 +217,29 @@ namespace ts { assertParseFileList(tsconfigWithExclude, "tsconfig.json", rootDir, allFiles, allFiles); }); + it("exclude declarationDir unless overridden", () => { + const tsconfigWithoutExclude = + `{ + "compilerOptions": { + "declarationDir": "declarations" + } + }`; + const tsconfigWithExclude = + `{ + "compilerOptions": { + "declarationDir": "declarations" + }, + "exclude": [ "types" ] + }`; + + const rootDir = "/"; + const allFiles = ["/declarations/a.d.ts", "/a.ts"]; + const expectedFiles = ["/a.ts"]; + + assertParseFileList(tsconfigWithoutExclude, "tsconfig.json", rootDir, allFiles, expectedFiles); + assertParseFileList(tsconfigWithExclude, "tsconfig.json", rootDir, allFiles, allFiles); + }); + it("implicitly exclude common package folders", () => { assertParseFileList( `{}`,