diff --git a/src/compiler/tsbuild.ts b/src/compiler/tsbuild.ts index 0229e0885f7..751f5221167 100644 --- a/src/compiler/tsbuild.ts +++ b/src/compiler/tsbuild.ts @@ -291,17 +291,20 @@ namespace ts { function getOutputJavaScriptFileName(inputFileName: string, configFile: ParsedCommandLine) { const relativePath = getRelativePathFromDirectory(rootDirOfOptions(configFile.options, configFile.options.configFilePath!), inputFileName, /*ignoreCase*/ true); const outputPath = resolvePath(configFile.options.outDir || getDirectoryPath(configFile.options.configFilePath!), relativePath); - return changeExtension(outputPath, (fileExtensionIs(inputFileName, Extension.Tsx) && configFile.options.jsx === JsxEmit.Preserve) ? Extension.Jsx : Extension.Js); + const newExtension = fileExtensionIs(inputFileName, Extension.Json) ? Extension.Json : + fileExtensionIs(inputFileName, Extension.Tsx) && configFile.options.jsx === JsxEmit.Preserve ? Extension.Jsx : Extension.Js; + return changeExtension(outputPath, newExtension); } function getOutputFileNames(inputFileName: string, configFile: ParsedCommandLine): ReadonlyArray { - if (configFile.options.outFile) { + // outFile is handled elsewhere; .d.ts files don't generate outputs + if (configFile.options.outFile || configFile.options.out || fileExtensionIs(inputFileName, Extension.Dts)) { return emptyArray; } const outputs: string[] = []; outputs.push(getOutputJavaScriptFileName(inputFileName, configFile)); - if (configFile.options.declaration) { + if (configFile.options.declaration && !fileExtensionIs(inputFileName, Extension.Json)) { const dts = getOutputDeclarationFileName(inputFileName, configFile); outputs.push(dts); if (configFile.options.declarationMap) { diff --git a/tests/projects/sample1/core/some_decl.d.ts b/tests/projects/sample1/core/some_decl.d.ts new file mode 100644 index 00000000000..2a9cf55cf28 --- /dev/null +++ b/tests/projects/sample1/core/some_decl.d.ts @@ -0,0 +1 @@ +declare const dts: any;