Jetbrains WebStorm 给出警告:对装饰器的实验性支持是一个可能会发生变化的特性

Jetbrains WebStorm gives warning: Experimental support for decorators is a feature that is subject to change

我已经针对这个警告搜索了一段时间,在我的 tsconfig 文件中设置 experimentalDecorators 似乎并没有消除警告。我在 Angular 的 Ionic 项目中工作。而我使用的 IDE 是 JetBrains 的 webstorm。如果您需要更多信息,请询问。

我的 tsconfig.json 文件:

{
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "declaration": false,
    "experimentalDecorators": true,
    "allowJs": true,
    "emitDecoratorMetadata": true,
    "lib": [
      "dom",
      "es2015"
    ],
    "module": "es2015",
    "moduleResolution": "node",
    "sourceMap": true,
    "target": "es5",
    "noUnusedLocals": false,
    "noUnusedParameters": false
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules",
    "src/**/*.spec.ts",
    "src/**/__tests__/*.ts"
  ],
  "compileOnSave": false,
  "atom": {
    "rewriteTsconfig": false
  }
}

我完全忘记了我有一个空文件 tsconfig.spec.json。将我的配置从 tsconfig.json 粘贴到 tsconfig.spec.json 文件中解决了这个问题。显然 WebStorm 寻找最近的 tsconfig.*.json 配置文件,对我来说它是 tsconfig.spec.json 而不是 tsconfig.json 文件。

@Tijl 的回答被低估了。然而,它需要一些详细说明

我遇到了类似的错误。

TS1192: Module '"fs"' has no default export.

TS1259: Module '"path"' can only be default-imported using the 'allowSyntheticDefaultImports' flag

使用时

import fs from "fs";
import path from "path";

vite.config.ts 文件中

allowSyntheticDefaultImports 添加到 tsconfig.json 没有产生任何结果(配置文件混淆)

{
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
  },
  "references": [
    {
      "path": "./tsconfig.node.json"
    }
  ]
}

然后我找到了问题所有者的答案并添加了对 tsconfig.node.ts

的修复
{
  "compilerOptions": {
    "composite": true,
    "module": "esnext",
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true // Add it here instead
  },
  "include": [
    "vite.config.ts"
  ]
}

这个解决方案有效的原因可以用 Whosebug 的另一个主题来解释:

引用:

You need two different TS configs because the project is using two different environments in which the TypeScript code is executed:

  1. Your app (src folder) is targeting (will be running) inside the browser
  1. Vite itself including it's config is running on your computer inside Node, which is totally different environment (compared with browser) with different API's and constraints

所以基本上对于 vite 特定的配置文件,你必须使用节点环境的 tsconfig。或者至少这是一个对我来说最有意义的解释,所以如果错了请纠正我:)