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

251

Я получаю предупреждение ...

Экспериментальная поддержка декораторов - это функция, которая может быть изменена в будущем выпуске. Установите параметр'ериментальный Декораторы ', чтобы удалить это предупреждение.

... хотя мои compilerOptions в tsconfig.json имеют следующие настройки:

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

Что странно, так это то, что некоторые случайные классы, которые используют декораторы, не показывают это предупреждение, а остальные в том же проекте.

Что может вызвать такое поведение в компиляторе TypeScript?

bensiu
источник
19
Вы пытались перезапустить VS Code? Я обнаружил, что это необходимо после внесения изменений в tsconfig.json.
Дэвид Шеррет
2
Вы можете попробовать удар ответ чувак. Это работает для меня! stackoverflow.com/a/38970591/2468781
eildiz
10
Случайно, если кто-то столкнется с этим, используя VS Professional, а не VS Code, вы, возможно, добавили .tsфайл в угловой проект вручную; если это так, компиляция TS по умолчанию конфликтует с Angular CLI. Щелкните правой кнопкой мыши файл -> Свойства -> Действие сборки: нет. Затем перезапустите VS, если это необходимо.
pbarranis
2
Перезапуск кода VS помог мне решить проблему.
CMA
4
Я случайно запустил VSCode ( code .) в неправильном каталоге. Все казалось нормальным - я видел и мог редактировать все свои файлы - поэтому сначала я не заметил, что что-то «не так». Но я получил это глупое предупреждение «Экспериментальные декораторы» об одном - и только об одном! - угловой компонент. Я вышел из VSCode, перезапустился ( code .снова) в ПРАВИЛЬНОМ каталоге (мой корень проекта Angular) .. и предупреждение исчезло.
paulsm4

Ответы:

220

Хотя VS Code - отличный редактор для проектов TypeScript, его нужно время от времени пускать в ход. Часто, без предупреждения, некоторые файлы приводят его в бешенство и жаловаться. В основном исправление заключается в том, чтобы сохранить и закрыть все открытые файлы, а затем открыть tsconfig.json. После этого вы сможете снова открыть файл-нарушитель без ошибок. Если это не работает, вспенить, промыть и повторить.

Если вы tsconfig.jsonуказываете свои исходные файлы с помощью filesмассива, IntelliSense будет работать правильно только в том случае, если на рассматриваемый файл ссылаются так, что VS Code может найти его, пройдя по дереву входных файлов.

Редактировать: команда 'reload window' (добавлена ​​много лет назад) должна решить эту проблему раз и навсегда.

linguamachina
источник
5
Спасибо - удаление «файлов» из tsconfig.json решает проблему
bensiu
4
Ответ не был действительно актуален для моего случая, но каким-то образом помог мне разобраться в моей проблеме. Я использую VS 2015, и между изменением xprojи tsconfigфайлом я упустил тот факт, что папка с моими файлами сценариев была указана в excludeразделе tsconfig. Надеюсь, это кому-нибудь поможет.
Стефан Балан
19
Файл> Закрыть папку> Открыть папку работал для меня. Это произошло после того, как я перезапустил машину без правильного закрытия vscode.
Адриан Моиза
3
Что если я не использую машинопись? Только javascript es6?
DDD
3
Я не уверен, когда он был добавлен, но палитра команд теперь имеет «Окно перезагрузки», которое идеально подходит для такого рода вещей.
Coderer
187

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

"javascript.implicitProjectConfig.experimentalDecorators": true

VSCode -> Настройки -> Настройки

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

Маной Пол
источник
Большое спасибо. Я использую es6 + декораторы и не установил машинопись. Потрясающие.
Ахмедзянов Данилиан
3
Этот ответ является лучшим, потому что нет необходимости создавать отдельный файл в проекте для решения проблемы VSCode.
Родриго
ctrl + ,Сочетание клавиш, чтобы открыть настройки пользователя. в настройках пользователя нажмите 3 точки ( ...), затем во всплывающем Open settings.jsonsettings.json
окне
Большое спасибо. Очень полезно.
an0nh4x0r
102

Эта ошибка также возникает, когда вы выбираете папку «src» для папки рабочей области.

Когда выбрана корневая папка, папка, в которой находятся «src», «node_modules», ошибка исчезает

Семир Делич
источник
9
Пришел сюда, чтобы опубликовать это. Это исправило это для меня. Я использовал Angular 2 через Angular CLI.
async
В случае, если вышеупомянутое не было понятным: Vscode должен загрузить папку, где файл конфигурации должен знать об этом. Если вы хотите загрузить папку дальше, я думаю, вы могли бы написать новый файл конфигурации, который будет действителен из этой папки и ниже.
LosManos
Вот и все. Спасибо :)
Камил
49

Файл -> Настройки -> Настройки

Дмитрий Ботов
источник
Для меня проблема появилась в версии 1.37, и ваше решение ее решило.
Стефан
32

внутри вашего проекта создайте файл tsconfig.json, затем добавьте следующие строки

{
    "compilerOptions": {
        "experimentalDecorators": true,
        "allowJs": true
    }
}
Мухаммед Мусса
источник
25

должен добавить typescript.tsdkв мой .vscode/settings.json:

"typescript.tsdk": "node_modules/typescript/lib"
beewest
источник
5
Это решило проблему для меня, но эта линия идет в .vscode/settings.jsonсоответствии с этим
Фрэн Родригес
1
Также решил это для меня, но у меня не было .vscodeпапки (я не знаю почему - я бэкенд-разработчик, оставь меня в покое!), Поэтому я создал одну в корневой папке с указанным settings.jsonфайлом.
Оге
18

В VSCode, перейдите в File => Preferences => Settings (или Control + запятая), и он откроет файл настроек пользователя. Поиск "javascript.implicitProjectConfig.experimentalDecorators": true, а затем установите флажок для экспериментальных декораторов в файл, и он должен это исправить. Это для меня.

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

Таки Раза Хан
источник
13

В 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
    }
}

После того, как было задано ошибочное поведение, всегда лучше указать «include» в файле конфигурации и перезапустить редактор. Например

{
    "compilerOptions": {
        "target": "ES6",
        "experimentalDecorators": true
    },
    "include": [
        "app/**/*"
    ],
    "exclude": [
        "node_modules"
    ]
}
Пере Страницы
источник
10
"javascript.implicitProjectConfig.experimentalDecorators": true

Решит эту проблему.

Раджеш Пал
источник
1
@nadya: settings.json(пользователь или рабочая область). Вы также можете использовать настройки
Фрэнк
9

Добавьте следующие строки в tsconfig.json и перезапустите VS Code.

{
    "compilerOptions": {
        "experimentalDecorators": true,
        "target": "es5",
        "allowJs": true
    }
}
Geetesh
источник
Перезагрузка была ключом для меня. Спасибо.
Рыноп
9

Не для того, чтобы понять смысл, но обязательно добавить следующее к

  • Настройки рабочего пространства, а не настройки пользователя

под Файл >> Настройки >> Настройки

"javascript.implicitProjectConfig.experimentalDecorators": правда

это решило проблему для меня, и я попробовал довольно много предложений, которые я нашел здесь и в других местах.

Питей м
источник
4

Ради ясности и глупости.

1) Откройте .vscode / settings.json.

2) Добавьте на него «typescript.tsdk»: «node_modules / typescript / lib».

3) Сохраните это.

4) Перезапустите код Visual Studio.

LEMUEL ADANE
источник
4

Если вы работаете в Visual Studio. Вы можете попробовать это исправить

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

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

    1. Перезагрузите проект в Visual studio.

увидеть более подробную информацию в этом месте.

Кумар Чандракету
источник
4

Если вы используете cli для компиляции файлов * .ts, вы можете установить Экспериментальные Декораторы, используя следующую команду:

 tsc filename.ts --experimentalDecorators "true"
Коджи Динфинте
источник
Спасибо, это спасло мое разочарование. У меня были те же настройки, что и у спрашивающего, однако я использовал Sublime Text 3 , и ваше решение оказалось полезным!
Ирфанди Джип
4

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

В моем случае это исправило все проблемы, связанные с этой проблемой.

dayanrr91
источник
Это было также моей проблемой. Можете ли вы увидеть node_modules? Вы видите tsconfig.json? Если нет, откройте новое окно vsCode, закройте старое окно, выберите «Файл» -> «Открыть папку» и убедитесь, что вы выбрали родительскую папку srcи node_modulesвместо «просто» src.
Кайл Васселла,
3
  1. Откройте VScode.
  2. Нажмите Ctrl + запятая
  3. Следуйте инструкциям на снимке экрана
    1. Поиск об экспериментальных декораторах
    2. Редактировать это
Мостафа
источник
2

Откройте папку всего проекта вместо имя-проекта / src

Файл tsconfig.json находится вне папки src

Андрей Яворский
источник
1

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

Д. Грин
источник
1

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

sparebytes
источник
1

Я столкнулся с той же проблемой при создании Injectable Services в Angular 2. У меня все есть в tsconfig.json. До сих пор я получал эту ошибку в строке ColorsImmutable.

@Injectable()
export class ColorsImmutable {

И исправление состояло в том, чтобы зарегистрировать Сервис на уровне модуля или на уровне компонентов с использованием массива провайдеров.

providers:[ColorsImmutable ],
Мохаммед Джавед
источник
1

Если вы используете Deno JavaScript и TypeScript runtime и включаете экспериментальные декораторы: true в tsconfig.json или в настройках VSCode ide. Он не будет работать. Согласно требованию 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"
  }
}
tksilicon
источник
Я уже этим занимаюсь и пока не повезло, так как в документах
говорится,
Это сработает. Смотрите обновленный ответ точно содержание моего tsconfig.json. Тогда посмотрите эту ссылку github.com/manyuanrong/dso/issues/18
tksilicon
0

Я добавил эту опцию в tsconfig.json, "baseUrl": "front-end"Замените интерфейс на имя вашего проекта angular-cli.

Шон Максвелл
источник
0

Вы также можете попробовать с ng build. Я только что перестроил приложение и теперь оно не соответствует.

Леандро здесь
источник
0

Оказывается, вы можете обойти это, сопоставив имя вашего модуля с именем файла. Если у вас есть имя модуля BankSpecialtyModule, тогда имя файла должно быть. банк-specialty.module.ts

Нил Коннолли
источник
0

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

Yirga
источник
0

Для меня эта ошибка «Экспериментальная поддержка декораторов - это функция, которая может быть изменена в будущем выпуске (и т. Д.)» Возникала только в VS Code в Angular-проекте и только при создании новой службы.

Приведенное выше решение: «В Visual Code Studio перейдите в« Файл »>« Настройки »>>« Настройки »,« Поиск »« Декоратор »в поле поиска и установите флажок« JavaScript »>« Неявная конфигурация проекта: экспериментальные декораторы ».

Кроме того, остановка ng serve в окне терминала и перезапуск заставили ошибку исчезнуть после перекомпиляции.

кругозор
источник