TypeScript编译中的实验装饰器警告


247

我收到警告...

对装饰器的实验支持是一项功能,将来的版本中可能会对其进行更改。设置'experimentalDecorators'选项`以消除此警告。

...即使我的tsconfig.json中的editorOptions具有以下设置:

"emitDecoratorMetadata": true,
"experimentalDecorators": true,

奇怪的是,某些使用装饰器的随机类没有显示该警告,而同一项目中的其余类却显示了该警告。

是什么导致TypeScript编译器中的此类行为?


19
您是否尝试过重新启动VS Code?我发现有时更改tsconfig.json后有必要。
David Sherret '16

2
您可以尝试打击答案花花公子。它对我有用!stackoverflow.com/a/38970591/2468781
eildiz

10
偶然地,如果有人遇到了使用VS Professional而不是VS Code的情况,则可能是您.ts手动将文件添加到了角度项目中。如果是这样,则默认的TS编译与Angular CLI冲突。右键单击文件->属性->构建操作:无。然后根据需要重新启动VS。
pbarranis

2
VS Code重新启动帮助我解决了这个问题。
CMA

4
我碰巧code .在错误的目录中启动了VSCode()。一切似乎都很好-我看到了并且可以编辑我的所有文件-所以起初我没有发现任何“错误”。但是我只收到了一个愚蠢的“实验装饰员”警告-只有一个!-角度组件。我退出了VSCode,code .正确的目录(我的Angular项目根目录)中重新启动了(再次),警告消失了。
paulsm4

Answers:


219

尽管VS Code是TypeScript项目的出色编辑器,但它需要时不时地发挥作用。通常,某些文件会在没有警告的情况下吓跑并抱怨。通常,解决方法似乎是保存并关闭所有打开的文件,然后打开tsconfig.json。之后,您应该可以重新打开有问题的文件,而不会出现错误。如果不起作用,则起泡沫,冲洗并重复。

如果您tsconfig.json使用files数组指定其源文件,则IntelliSense仅在引用有问题的文件时才能正常运行,以便VS Code可以通过遍历输入文件树来找到它。

编辑:“重新加载窗口”命令(现在已经添加了很久了)应该彻底解决此问题。


5
谢谢-从tsconfig.json删除“文件”解决了问题
bensiu

4
答案与我的案子并没有真正的关系,但是以某种方式帮助我弄清了我的问题。我正在使用VS 2015,并且在更改xprojtsconfig文件之间,我错过了包含脚本文件的文件夹在的exclude部分中列出的事实tsconfig。希望这对某人有帮助。
Stefan Balan

18
文件>关闭文件夹>打开文件夹对我有用。在没有正确关闭vscode的情况下重新启动计算机后,发生了这种情况。
阿德里安·莫伊萨

3
如果我不使用打字稿怎么办?只有JavaScript ES6?
DDD

3
我不确定何时添加它,但是命令调色板现在具有“重新加载窗口”,这对于此类事情非常理想。
编码员

184

我必须在vscode的settings.json文件中添加以下内容以删除警告。

"javascript.implicitProjectConfig.experimentalDecorators": true

VSCode->首选项->设置

在此处输入图片说明


非常感谢。我正在使用es6 + decorators,但尚未安装打字稿。太棒了
Akhmedzianov Danilian

3
这个答案是最好的,因为不需要在项目中创建单独的文件来解决VSCode问题。
罗德里戈'18

ctrl + ,打开用户设置的快捷键。在用户设置上,单击3点(...),然后在弹出窗口上单击Open settings.json以打开settings.json
suhailvs

非常感谢。很有帮助。
an0nh4x0r

102

当您为工作区文件夹选择“ src”文件夹时,也会发生此错误。

选择“ src”,“ node_modules”所在的根文件夹后,错误消失


9
来到这里发布这个。这为我解决了。我通过Angular CLI使用Angular 2。
异步

如果以上内容无法理解:Vscode必须加载配置文件所在的文件夹。如果您想进一步向下加载文件夹,我您可以编写一个新的配置文件,该文件在该文件夹及其下方均有效。
LosManos

就是这样 谢谢:)
卡米尔



25

必须添加typescript.tsdk到我的.vscode/settings.json

"typescript.tsdk": "node_modules/typescript/lib"

5
这解决了这个问题对我来说,但该行进入.vscode/settings.json每因为这个
弗兰·罗德里格斯

1
也为我解决了这个问题,但是我没有.vscode文件夹(我不知道为什么-我是一个后端开发人员,别管我!),所以我在根文件夹中创建了一个settings.json文件。
Aage

15

在VSCode中,转到File => Preferences => Settings(或Control +逗号),它将打开User Settings文件。搜索“ javascript.implicitProjectConfig.experimentalDecorators”:true,然后选中该文件的experimentalDecorators复选框,它应该对其进行修复。它对我有用。

在此处输入图片说明



11

settings.json在以下位置打开文件<project_folder>/.vscode/settings.json

或者您可以从菜单中打开文件,如下所述

VSCode -> File -> Preferences -> Workspace Settings

实验性装饰器设置

然后在settings.json文件中添加以下行

{
    "typescript.tsdk": "node_modules/typescript/lib",
    "enable_typescript_language_service": false
}

就这样。您不会看到有关“ experimentalDecorators ”的警告/错误


11
使用vscode 1.8.1添加“ enable_typescript_language_service”后,我得到了“未知配置设置”
David Cheung

5
如果您的项目使用Typescript,这是可怕的建议!
paulsm4

1
禁用“ enable_typescript_language_service”将有效地关闭任何实时的TypeScript产品,请避免该建议。
Jessy

10

此答案适用于使用Javascript项目而不是Typescript项目的人员。代替的tsconfig.json文件,你可以使用jsconfig.json文件。

在有装饰器警告您要在文件内部写入的特定情况下:

{
    "compilerOptions": {
        "experimentalDecorators": true
    }
}

根据所提出的越野车行为,最好在配置文件中指定“ include”,然后重新启动编辑器。例如

{
    "compilerOptions": {
        "target": "ES6",
        "experimentalDecorators": true
    },
    "include": [
        "app/**/*"
    ],
    "exclude": [
        "node_modules"
    ]
}


9

在tsconfig.json中添加以下行,然后重新启动VS Code。

{
    "compilerOptions": {
        "experimentalDecorators": true,
        "target": "es5",
        "allowJs": true
    }
}

重新启动是我的关键。谢谢。
rynop

9

不要太在意这一点,但请确保将以下内容添加到

  • 工作区设置不是用户设置

在文件>>首选项>>设置下

“ javascript.implicitProjectConfig.experimentalDecorators”:是

这为我解决了这个问题,我尝试了很多在这里和其他地方找到的建议。



4

为了清楚和愚蠢。

1)打开.vscode / settings.json。

2)在上面添加“ typescript.tsdk”:“ node_modules / typescript / lib”。

3)保存。

4)重新启动Visual Studio代码。


4

如果您在Visual Studio中工作。您可以尝试此修复

  1. 从Visual Studio卸载项目
  2. 转到项目主目录,然后打开“ csproj”文件。
  3. 如图所示,将TypeScriptExperimentalDecorators添加到此部分

    在此处输入图片说明

    1. 在Visual Studio中重新加载项目。

位置查看更多详细信息。


4

如果您使用cli来编译* .ts文件,则可以使用以下命令来设置experimentalDecorators:

 tsc filename.ts --experimentalDecorators "true"

谢谢,这保存了我的沮丧。我具有与发问者相同的设置,但是我使用的是Sublime Text 3,事实证明您的解决方案是有帮助的!
Irfandy Jip

4

请检查您是否在VS Code中选择了整个项目的文件夹,而不仅仅是src文件夹,因为如果仅打开src,则ts.config.json(位于项目文件夹中)文件将不在范围内,并且VS无法识别实验装饰器参数。

就我而言,这解决了与此问题有关的所有问题。


这也是我的问题。可以看到node_modules吗?可以看到tsconfig.json吗?如果不是,请打开一个新的vsCode窗口,关闭旧窗口,选择file-> open folder,并确保选择srcand 的父文件夹node_modules,而不是just src
凯尔·瓦塞拉



1

我通过从tsconfig.json文件中删除“ baseUrl”:“”纠正了警告


1

如果打开项目外部存在的TS文件,则可能会遇到此问题。例如,我正在使用lerna,并从另一个软件包中打开了一个文件。尽管该其他程序包具有带有实验装饰器的tsconfig,但VsCode却不兑现。


1

在Angular 2中创建可注射服务时遇到了相同的问题。我在tsconfig.json中放置了所有内容。仍然在ColorsImmutable行遇到此错误。

@Injectable()
export class ColorsImmutable {

解决的方法是使用providers数组在模块级别或组件级别注册服务。

providers:[ColorsImmutable ],

1

如果您使用Deno JavaScript和TypeScript运行时,并且在tsconfig.json或VSCode ide设置中启用了experimentalDecorators:true。不起作用。根据Deno的要求,运行Deno文件时需要提供tsconfig作为标志。请参阅自定义TypeScript编译器选项

在我的特定情况下,我正在运行Deno测试并使用。

$ deno test -c tsconfig.json

如果它是一个文件,您将拥有类似

 $ deno run -c tsconfig.json mod.ts

我的tsconfig.json

{
  "compilerOptions": {
    "allowJs": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "module": "esnext"
  }
}

我已经在这样做了,但是还没有运气,因为他们在文档中指出实验性功能无法正常工作
Ezzabuzaid

它会工作。请参阅我的tsconfig.json内容的最新答案。然后看这个链接github.com/manyuanrong/dso/issues/18
tksilicon

0

我将此选项添加到tsconfig.json,"baseUrl": "front-end"用您的angular-cli项目的名称替换前端。


0

您也可以尝试使用ng build。我刚刚重建了应用程序,但现在不符合要求。


0

因此,您可以通过将模块名称与文件名匹配来解决此问题。如果模块名称为BankSpecialtyModule,则文件名应为。bank-specialty.module.ts


0

创建新模块并将* .module.ts和* -routing.module.ts文件移动到另一个文件夹时,我遇到了此错误。在删除两个文件并在新文件夹上创建模块后,它可以正常运行。环境Angular版本9和Angular CLI版本9.1.0

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.