Попередження експериментальних декораторів у компіляції TypeScript


247

Я отримую попередження ...

Експериментальна підтримка декораторів - особливість, яка може бути змінена в майбутньому випуску. Встановіть параметр "експериментальні Декоратори", щоб видалити це попередження.

... навіть незважаючи на те, що мої компіляториOptions в tsconfig.json мають такі налаштування:

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

Що дивно, це те, що деякі випадкові класи, які використовують декоратори, не показують цього попередження, але решта в цьому ж проекті.

Що може спричинити таку поведінку у компіляторі TypeScript?


19
Ви спробували перезапустити код VS? Я вважав, що це потрібно після внесення змін tsconfig.json іноді.
Девід Шеррет

2
Ви можете спробувати чувак відповісти. Це працює для мене! stackoverflow.com/a/38970591/2468781
eildiz

10
Випадково, якщо хтось інший зіткнеться з цим, який використовує VS Professional, а не VS Code, можливо, ви додали .tsфайл до кутового проекту вручну; якщо так, компіляція TS за замовчуванням суперечить Angular CLI. Клацніть файл правою кнопкою миші -> Властивості -> Дія побудови: Ні. Потім перезапустіть VS, якщо потрібно.
pbarranis

2
Перезапуск VS Code допоміг мені вирішити проблему.
CMA

4
У мене трапилося запустити VSCode ( code .) у неправильній директорії. Все здавалося нормальним - я бачив і міг редагувати всі свої файли - тому спочатку я не помітив, що щось було «неправильно». Але я отримав це дурне попередження "Експериментальні декоратори" на одне - і тільки одне! - кутова складова. Я вийшов з VSCode, перезапустив ( code .знову) в каталозі CORRECT (мій корінь проекту Angular) .. і попередження зникло.
paulsm4

Відповіді:


219

Хоча VS Code є чудовим редактором для проектів TypeScript, він потребує удару раз у раз. Часто, без попередження, певні файли призводять до того, що вони вигадують і скаржаться. Здається, виправленням є збереження та закриття всіх відкритих файлів, а потім відкриття tsconfig.json. Після цього ви маєте змогу без помилок повторно відкрити файл-порушення. Якщо це не працює, натріть піску, промийте та повторіть.

Якщо ваш файл tsconfig.jsonвизначає вихідні файли за допомогою filesмасиву, IntelliSense буде функціонувати правильно лише в тому випадку, якщо на відповідний файл посилається такий код, що VS-код може знайти його шляхом переходу до дерева вхідних файлів.

Редагувати: Команда 'вікно перезавантаження' (додана століттями зараз) повинна вирішити цю проблему раз і назавжди.


5
Дякую - видалення "файлів" з tsconfig.json вирішити проблему
bensiu

4
Відповідь не була дуже важливою для моєї справи, але якимось чином допомогла розібратися в моїй проблемі. Я використовую VS 2015 і між зміною файлу xprojта tsconfigфайлу я пропустив той факт, що папка з файлами моїх скриптів була перерахована у excludeрозділі tsconfig. Сподіваюся, що це комусь допоможе.
Стефан Балан

18
Файл> Закрити папку> Відкрити папку для мене. Це сталося після того, як я перезапустив машину без належного закриття vscode.
Адріана Мойса

3
Що робити, якщо я не використовую машинопис? Тільки javascript es6?
DDD

3
Я не впевнений, коли він був доданий, але тепер у палітрі команд є "Перезавантажити вікно", що ідеально підходить для подібних речей.
Coderer

184

Я повинен додати наступне у файл settings.json файл vscode, щоб видалити попередження.

"javascript.implicitProjectConfig.experimentalDecorators": true

VSCode -> Налаштування -> Налаштування

введіть тут опис зображення


Дуже дякую. Я використовую декоратори es6 + і не встановлено машинопис. Дивовижно.
Ахмедзанов Даниліан

3
Ця відповідь найкраща, тому що для вирішення проблеми VSCode у проекті не потрібно створювати відокремлений файл.
Родріго

ctrl + ,клавіша швидкого доступу для відкриття налаштувань користувачів. на налаштуваннях користувачів натисніть 3 крапки ( ...), потім на спливаючому вікні натисніть, Open settings.jsonщоб відкритиsettings.json
suhailvs

Дуже дякую. Дуже корисний.
an0nh4x0r

102

Ця помилка також виникає, коли ви вибираєте папку "src" для папки робочої області.

Коли вибирається коренева папка, папка, де знаходяться "src", "node_modules", помилка зникає


9
Прийшов сюди, щоб опублікувати це. Це зафіксувало це для мене. Я використовував Angular 2 через Angular CLI.
асинхрон

Якщо вищесказане було незрозумілим: Vscode повинен завантажити папку, у якій повинен знати конфігураційний файл. Якщо ви хочете завантажити папку далі вниз, я думаю, ви можете написати новий конфігураційний файл, який би був дійсним з цієї папки та нижче.
ЛосМанос

Це було все. Дякую :)
Каміль


32

всередині проекту створіть файл tsconfig.json, а потім додайте ці рядки

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

25

доведеться додати typescript.tsdkдо мого .vscode/settings.json:

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

5
Це вирішило проблему для мене, але ця лінія переходить в .vscode/settings.jsonвідповідно з цим
Френ Родрігес

1
Також вирішив це для мене, але у мене не було .vscodeпапки (я не знаю, чому - я бекенд-дев, залиште мене в спокої!), Тому я створив її в кореневій папці із зазначеним settings.jsonфайлом.
Aage

16

У VSCode перейдіть до Файл => Налаштування => Налаштування (або Контроль + кома), і він відкриє файл налаштувань користувача. Пошук "javascript.implicitProjectConfig.experimentalDecorators": true та встановіть прапорець у файлі eksperimentalDecorators до файлу, і він повинен його виправити. Це зробило для мене.

введіть тут опис зображення


12

У Visual Code Studio перейдіть до Файл >> Налаштування >> Налаштування, знайдіть «декоратор» у полі пошуку та перевірте параметр, як на зображенні. введіть тут опис зображення


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
}

Це все. Ви не побачите жодного попередження / помилки щодо " експериментальних декораторів "


11
Я отримав "Невідомий параметр конфігурації" після додавання "enable_typescript_language_service" за допомогою vscode 1.8.1
David Cheung

5
Це БЕЗПЕЧНА порада, якщо ваш проект використовує Typescript!
paulsm4

1
Якщо вимкнути функцію "enable_typescript_language_service", це фактично вимкне будь-які пропозиції, що надають вкладку TypeScript, будь ласка, уникайте цієї пропозиції.
Джессі

10

Ця відповідь призначена для людей, які використовують проект Javascript, а не Typescript . Замість файлу tsconfig.json ви можете використовувати файл jsconfig.json .

У конкретному випадку попередження декораторів про те, що ви хочете написати всередині файлу:

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

Для встановлення запитуваної поведінки, завжди краще вказати "включити" у файлі конфігурації та перезапустити редактор. Напр

{
    "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) Додайте на нього "typecript.tsdk": "node_modules / typecript / lib".

3) Збережіть його.

4) Перезавантажте код Visual Studio.


4

Якщо ви працюєте в студії Visual. Ви можете спробувати це виправлення

  1. Вивантажте проект із візуальної студії
  2. Перейдіть у домашній каталог свого проекту та відкрийте файл "csproj".
  3. Додайте TypeScriptExperimentalDecorators до цього розділу, як показано на зображенні

    введіть тут опис зображення

    1. Перезавантажте проект у студії Visual.

див. більше деталей у цьому місці.


4

Якщо ви використовуєте cli для компіляції файлів * .ts, ви можете встановити експериментальні Декоратори за допомогою наступної команди:

 tsc filename.ts --experimentalDecorators "true"

Дякую, це врятувало моє розчарування. У мене були ті ж налаштування, що і у запитувача, проте я використовував Sublime Text 3 , і ваше рішення виявилося корисним!
Ірфанді Джип

4

Перевірте, чи ви відкрили у своєму коді VS папку всього проекту, а не лише папки src, оскільки якщо ви відкриєте лише src, то файл ts.config.json (розташований у папці проекту) не буде в обсягах, і VS не розпізнає параметри експериментальних декораторів.

У моєму випадку це вирішило усі проблеми, пов'язані з цим питанням.


Це також було моїм питанням. Ви можете бачити node_modules? Ви можете бачити tsconfig.json? Якщо ні, відкрийте нове вікно vsCode, закрийте старе вікно, виберіть файл -> відкрити папку та переконайтесь, що ви вибрали батьківську папку srcта node_modules, а не просто вибираєте src.
Кайл Василла



1

Я виправив попередження, видаливши "baseUrl": "" з файлу tsconfig.json


1

Ви можете зіткнутися з цією проблемою, якщо відкриєте файл TS, який існує поза проектом. Наприклад, я використовую lerna і відкрив файл з іншого пакету. Хоча цей інший пакет мав власну tsconfig з експериментальними декораторами, VsCode це не шанує.


1

Я зіткнувся з тією ж проблемою під час створення служб ін'єкцій у кутовій формі 2. У мене все є на місці в tsconfig.json. Доки я отримував цю помилку на лінії ColorsImmutable.

@Injectable()
export class ColorsImmutable {

І виправленням було зареєструвати Сервіс на рівні модуля або компонента за допомогою масиву постачальників.

providers:[ColorsImmutable ],

1

Якщо ви використовуєте Deno JavaScript та TypeScript під час виконання та ви включаєте ExperimDecorators: true у tsconfig.json або в налаштуваннях ідеї VSCode. Це не спрацює. Відповідно до вимоги Deno, вам потрібно надати tsconfig як прапор під час запуску файлу Deno. Див. Розділ Параметри компілятора користувальницького типу 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"
  }
}

Я вже роблю це, але ще не пощастило, оскільки вони заявляють, що в документах експериментальні функції не
спрацюють

Це спрацює. Дивіться оновлену відповідь саме на вміст мого tsconfig.json. Потім дивіться це посилання github.com/manyuanrong/dso/isissue/18
tksilicon

0

Я додав цю опцію до tsconfig.json, "baseUrl": "front-end"замініть лицьову сторону на ім'я вашого кутового проекту.


0

Ви також можете спробувати ng build. Я щойно переробив додаток, і тепер він не відповідає.


0

Тож виявляється, що ви зможете обійти це, порівнявши ім'я свого модуля з назвою файла. Якщо у вас є ім'я модуля BankSpecialtyModule, то ім'я файлу має бути. bank-specialty.module.ts


0

Я зіткнувся з цією помилкою, коли створив новий модуль і перемістив файл * .module.ts та * -routing.module.ts в іншу папку. Після того як я видалив два файли та створив модуль у новій папці, він працює чудово. Середовище кутова версія 9 та кутова CLI версія 9.1.0

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.