Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Typescript error "Cannot write file ... because it would overwrite input file."

In my instance, I was using the outDir option but not excluding the destination directory from the inputs:

// Bad
{
    "compileOnSave": true,
    "compilerOptions": {
        "outDir": "./built",
        "allowJs": true,
        "target": "es5",
        "allowUnreachableCode": false,
        "noImplicitReturns": true,
        "noImplicitAny": true,
        "typeRoots": [ "./typings" ],
        "outFile": "./built/combined.js"
    },
    "include": [
        "./**/*"
    ],
    "exclude": [
        "./plugins/**/*",
        "./typings/**/*"
    ]
}

All we have to do is exclude the files in the outDir:

// Good
{
    "compileOnSave": true,
    "compilerOptions": {
        "outDir": "./built",
        "allowJs": true,
        "target": "es5",
        "allowUnreachableCode": false,
        "noImplicitReturns": true,
        "noImplicitAny": true,
        "typeRoots": [ "./typings" ],
        "outFile": "./built/combined.js"
    },
    "include": [
        "./**/*"
    ],
    "exclude": [
        "./plugins/**/*",
        "./typings/**/*",
        "./built/**/*" // This is what fixed it!
    ]
}

I got the same issue. In my case, it was the result of the option: allowJs: true.

So I basically had to remove that line to get rid of the errors. I do not see it in your code, but perhaps it helps you here.

Good luck!


I have run into this issue due to VSCode autocompleting a file in the dist/ folder.

import { SomeClass } from '../../dist/xxx/someclass' 

To solve the problem just fix the import:

import { SomeClass } from './someclass' 

There's several possible causes to this.

  • In your tsconfig.json:
    • Set outDir to "dist" or the name of another same-level folder. (prefixing with './' is unnecessary). This is where the build files go.
    • Set allowJs to false or delete the line. Note: enabled, allowJs will conflict with the declaration setting/flag. It isn't enabled by default.
    • Include "dist" (or your build folder) in exclude.
  • In your package.json:
    • Set main to "index" or some other chosen name. Don't prefix with the build folder (eg "dist/index"), nor the unnecessary "./".
    • Set types (modern alias of typings) to "index". Adding the extensions (.d.ts or .js) is unnecessary.

Though you can have it a million different ways, for the sake of simplicity and developing understanding it's best to stick to common practices at first - like using "dist", simple tsconfig.json and package.json files at the same level in the tree, and so on. Of course, rooting through the files of your node_modules would also deepen your grasp, but there are more rewarding things in life.