typescript - Alternativet 'emitDeclarationOnly' kan inte anges tillsammans med alternativet 'noEmit'


Jag arbetar med ett VueJS-projekt, och vi har precis implementerat Typescript (version 4.8.4).

Jag fick detta fel error TS5053: Option 'emitDeclarationOnly' kan inte anges tillsammans med option 'noEmit' efter att ha uppdaterat ett gränssnitt i en ts-typfil.

I min tsconfig-fil deklarerar vi bara "emitDeclarationOnly": true, men det verkar som att noEmit är deklarerat med andra paket under node_modules.

Här är hela innehållet i tsconfig-filen

{
  "compilerOptions": {
    "target": "es6",
    "module": "es6",
    "strict": true,
    "jsx": "preserve",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "sourceMap": true,
    "noImplicitAny": false,
    "baseUrl": ".",
    "allowJs": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "declaration": true,
    "isolatedModules": true,
    "emitDeclarationOnly": true,
    "outDir": "tsdist",
    "types": [
      "webpack-env",
      "jest"
    ],
    "typeRoots": [
      "./node_modules/@types",
    ],
    "paths": {
      "@/*": [
        "src/*"
      ],
      "AppCheckout/*": ["src/assets/scripts/AppComponent/Checkout/src/*"],
      "AppCommon/*": ["src/assets/scripts/AppComponent/Common/src/*"],
      "AppPublication/*": ["src/assets/scripts/AppComponent/Publication/src/*"],
      "AppStore/*": ["src/assets/scripts/AppComponent/Store/src/*"]
    },
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "tests/**/*.ts",
    "tests/**/*.tsx"
, "src/assets/scripts/globals/Container/Core/initContainer.js"  ],
  "exclude": [
    "node_modules",
    "./tasks"
  ],
  "vueCompilerOptions": {
    "target": 2.7
  }
}


Svar #1

Jag hittade källan till detta problem. Förresten använder vi paketet lint-staged i projektet för att validera ändringarna innan commits. Och i konfigurationsfilen för detta paket kontrollerar vi TypeScript-filerna genom att tvinga noEmit-alternativet medan vi i tsconfig-konfigurationsfilen definierar emitDeclarationOnly

  "src/**/*.ts": [
    "tsc-files --noEmit"
  ],

Så det var nödvändigt att harmonisera de två konfigurationerna för att undvika den här typen av fel.

Relaterade artiklar