Попередження експериментальних декораторів у компіляції 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.