Ostrzeżenie dotyczące eksperymentalnych dekoratorów w kompilacji TypeScript

247

Otrzymuję ostrzeżenie ...

Eksperymentalne wsparcie dla dekoratorów to funkcja, która może ulec zmianie w przyszłej wersji. Ustaw opcję „experimentalDecorators”, aby usunąć to ostrzeżenie.

... mimo że moje compilerOptions w tsconfig.json mają następujące ustawienia:

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

Dziwne jest to, że niektóre losowe klasy, które używają dekoratorów, nie pokazują tego ostrzeżenia, ale robią to pozostałe w tym samym projekcie.

Co może powodować takie zachowanie w kompilatorze TypeScript?

bensiu
źródło
19
Czy próbowałeś ponownie uruchomić VS Code? Uważam, że jest to konieczne po wprowadzeniu czasami zmian w pliku tsconfig.json.
David Sherret,
2
Możesz spróbować odpowiedzieć koleś. To działa dla mnie! stackoverflow.com/a/38970591/2468781
eildiz
10
Przypadkiem, jeśli ktoś napotka na to coś, który używa VS Professional, a nie VS Code, być może .tsręcznie dodałeś plik do projektu kątowego; jeśli tak, domyślna kompilacja TS jest w konflikcie z Angular CLI. Kliknij plik prawym przyciskiem myszy -> Właściwości -> Kompilacja: Brak. Następnie uruchom ponownie VS w razie potrzeby.
pbarranis,
2
Ponowne uruchomienie kodu VS pomogło mi rozwiązać problem.
CMA,
4
Zdarzyło mi się uruchomić VSCode ( code .) w niewłaściwym katalogu. Wszystko wydawało się OK - widziałem i mogłem edytować wszystkie moje pliki - więc na początku nie zauważyłem, że coś jest „nie tak”. Ale dostałem tego głupiego „eksperymentalnego dekoratora” na jednym - i tylko na jednym! - Element kątowy. Opuściłem VSCode, ponownie uruchomiłem ( code .ponownie) w katalogu CORRECT (mój katalog główny projektu Angular) .. i ostrzeżenie zniknęło.
paulsm4

Odpowiedzi:

219

Chociaż VS Code jest świetnym edytorem dla projektów TypeScript, od czasu do czasu potrzebuje kopniaka. Często bez ostrzeżenia niektóre pliki powodują, że wariuje i narzeka. Najczęściej wydaje się, że poprawka polega na zapisywaniu i zamykaniu wszystkich otwartych plików, a następnie otwieraniu tsconfig.json. Następnie powinieneś być w stanie ponownie otworzyć niepoprawny plik bez błędów. Jeśli to nie działa, spień, wypłucz i powtórz.

Jeśli tsconfig.jsonokreślisz swoje pliki źródłowe za pomocą filestablicy, IntelliSense będzie działał poprawnie tylko wtedy, gdy plik zostanie przywołany, tak że VS Code może go znaleźć, przechodząc przez drzewo plików wejściowych.

Edycja: Polecenie „przeładuj okno” (dodane teraz przed wiekami) powinno raz na zawsze rozwiązać ten problem.

linguamachina
źródło
5
Dziękujemy - usunięcie „plików” z tsconfig.json rozwiązać problem
bensiu
4
Odpowiedź nie była tak naprawdę istotna dla mojej sprawy, ale jakoś pomogła mi zrozumieć mój problem. Korzystam z VS 2015 i między zmianą pliku xproja tsconfigpominąłem fakt, że folder z moimi plikami skryptów został wymieniony w excludesekcji tsconfig. Mam nadzieję, że to komuś pomoże.
Stefan Balan
18
Plik> Zamknij folder> Otwórz folder działał dla mnie. Stało się tak po ponownym uruchomieniu komputera bez prawidłowego zamknięcia vscode.
Adrian Moisa
3
Co jeśli nie używam maszynopisu? Tylko javascript es6?
DDD
3
Nie jestem pewien, kiedy został dodany, ale paleta poleceń ma teraz „Okno przeładowania”, które jest idealne do tego rodzaju rzeczy.
Coderer
184

Muszę dodać następujące w pliku settings.json vscode, aby usunąć ostrzeżenie.

"javascript.implicitProjectConfig.experimentalDecorators": true

VSCode -> Preferencje -> Ustawienia

wprowadź opis zdjęcia tutaj

Manoj Paul
źródło
Wielkie dzięki. Używam dekoratorów es6 + i nie mam zainstalowanego maszynopisu. Niesamowite.
Achmedzianov Danilian
3
Ta odpowiedź jest najlepsza, ponieważ nie trzeba tworzyć osobnego pliku w projekcie, aby rozwiązać problem z VSCode.
Rodrigo
ctrl + ,Klawisz skrótu, aby otworzyć ustawienia użytkownika. w ustawieniach użytkownika kliknij 3 kropki ( ...), a następnie w wyskakujące Open settings.jsonsettings.json
okienko
Wielkie dzięki. Bardzo pomocne.
an0nh4x0r
102

Ten błąd występuje również po wybraniu folderu „src” dla folderu obszaru roboczego.

Po wybraniu folderu głównego, folderu, w którym znajdują się „src”, „node_modules”, błąd znika

Semir Deljić
źródło
9
Przyszedł tutaj, aby to opublikować. Naprawiłem to dla mnie. Korzystałem z Angular 2 przez Angular CLI.
asynchronizuje
W przypadku, gdy powyższe nie było zrozumiałe: Vscode musi załadować folder, w którym plik konfiguracyjny ma o tym wiedzieć. Jeśli chcesz załadować folder dalej, myślę, że możesz napisać nowy plik konfiguracyjny, który byłby prawidłowy z tego folderu i poniżej.
LosManos
To było to. Dziękuję :)
Kamil
44

Plik -> Preferencje -> Ustawienia

Dmitriy Botov
źródło
Dla mnie problem pojawił się w wersji 1.37 i twoje rozwiązanie go rozwiązało.
Stephane,
32

w swoim projekcie utwórz plik tsconfig.json, a następnie dodaj te linie

{
    "compilerOptions": {
        "experimentalDecorators": true,
        "allowJs": true
    }
}
Muhammed Moussa
źródło
25

muszę dodać typescript.tsdkdo mojego .vscode/settings.json:

"typescript.tsdk": "node_modules/typescript/lib"
najgorszy
źródło
5
To rozwiązać problem dla mnie, ale ta linia przechodzi .vscode/settings.json, jak na to
Od Rodriguez
1
Rozwiązałem to również dla mnie, ale nie miałem .vscodefolderu (nie wiem dlaczego - jestem backendem, zostaw mnie w spokoju!), Więc utworzyłem go w folderze głównym ze wspomnianym settings.jsonplikiem.
Aage
16

W VSCode, przejdź do Plik => Preferencje => Ustawienia (lub Control + przecinek), a otworzy się plik ustawień użytkownika. Wyszukaj „javascript.implicitProjectConfig.experimentalDecorators”: true, a następnie zaznacz pole wyboru dla eksperymentalnychDecoratorów w pliku i powinno to zostać naprawione. To mi zrobiło.

wprowadź opis zdjęcia tutaj

Taqi Raza Khan
źródło
12

W Visual Code Studio przejdź do Plik >> Preferencje >> Ustawienia, Wyszukaj „dekorator” w polu wyszukiwania i zaznacz opcję jak na obrazku. wprowadź opis zdjęcia tutaj

Muzaffar Mahmood
źródło
11

Otwórz settings.jsonplik w następującej lokalizacji<project_folder>/.vscode/settings.json

lub możesz otworzyć plik z menu, jak wspomniano poniżej

VSCode -> File -> Preferences -> Workspace Settings

eksperymentalne ustawienia Dekoratorów

Następnie dodaj następujące wiersze do settings.jsonpliku

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

To wszystko. Nie zobaczysz żadnego ostrzeżenia / błędu dotyczącego „ eksperymentalnych dekoratorów

Vinothkumar Arputharaj
źródło
11
Dostałem „Nieznane ustawienie konfiguracji” po dodaniu „enable_typescript_language_service” przy użyciu vscode 1.8.1
David Cheung
5
To jest OGROMNA rada, jeśli twój projekt używa maszynopisu!
paulsm4
1
Wyłączenie „enable_typescript_language_service” skutecznie wyłączyłoby wszelkie oferty na temat ciągłego wyświetlania linków na żywo. Unikaj tej sugestii.
Jessy
10

Ta odpowiedź jest przeznaczona dla osób korzystających z projektu Javascript , a nie projektu maszynopisu . Zamiast pliku tsconfig.json możesz użyć pliku jsconfig.json .

W szczególnym przypadku, gdy dekoratorzy ostrzegają, że chcesz zapisać w pliku:

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

W przypadku zapytanych zachowań buggy zawsze lepiej jest określić „włącz” w pliku konfiguracyjnym i ponownie uruchomić edytor. Na przykład

{
    "compilerOptions": {
        "target": "ES6",
        "experimentalDecorators": true
    },
    "include": [
        "app/**/*"
    ],
    "exclude": [
        "node_modules"
    ]
}
Pere Pages
źródło
10
"javascript.implicitProjectConfig.experimentalDecorators": true

Rozwiązuje ten problem.

Rajesh Pal
źródło
1
@nadya: settings.json(użytkownik lub przestrzeń robocza). Możesz także użyć ustawień GUI, tak jak ta odpowiedź
Frank Nocke,
9

Dodaj następujące wiersze w tsconfig.json i zrestartuj VS Code.

{
    "compilerOptions": {
        "experimentalDecorators": true,
        "target": "es5",
        "allowJs": true
    }
}
Geetesh
źródło
Ponowne uruchomienie było dla mnie kluczem. Dzięki.
rynop
9

Nie należy podważać tej kwestii, ale należy dodać do niej następujące elementy

  • Ustawienia obszaru roboczego, a nie Ustawienia użytkownika

w sekcji Plik >> Preferencje >> Ustawienia

„javascript.implicitProjectConfig.experimentalDecorators”: true

to rozwiązało problem i próbowałem sporo sugestii, które znalazłem tutaj i w innych miejscach.

petey m
źródło
4

Dla jasności i głupoty.

1) Otwórz plik .vscode / settings.json.

2) Dodaj do niej „typescript.tsdk”: „node_modules / typescript / lib”.

3) Zapisz to.

4) Uruchom ponownie kod Visual Studio.

LEMUEL ADANE
źródło
4

Jeśli pracujesz w Visual Studio. Możesz wypróbować tę poprawkę

  1. Uwolnij swój projekt ze studia wizualnego
  2. Przejdź do katalogu domowego projektu i otwórz plik „csproj”.
  3. Dodaj TypeScriptExperimentalDecorators do tej sekcji, jak pokazano na obrazku

    wprowadź opis zdjęcia tutaj

    1. Załaduj ponownie projekt w Visual Studio.

zobacz więcej szczegółów w tej lokalizacji.

Kumar Chandraketu
źródło
4

Jeśli używasz cli do kompilacji plików * .ts, możesz ustawić experimentalDecorators za pomocą następującego polecenia:

 tsc filename.ts --experimentalDecorators "true"
Koji D'infinte
źródło
Dzięki, uratowało to moją frustrację. Miałem te same ustawienia co pytający, jednak korzystałem z Sublime Text 3 , a twoje rozwiązanie okazało się pomocne!
Irfandy Jip
4

Sprawdź, czy w swoim kodzie VS sprzeciwiłeś się folderowi całego projektu, a nie tylko folderowi src, ponieważ jeśli otworzysz tylko plik src, plik ts.config.json (znajdujący się w folderze projektu) nie będzie objęty zakresem, a VS nie rozpozna eksperymentalnych parametrów dekoratorów.

W moim przypadku rozwiązało to wszystkie problemy związane z tym problemem.

dayanrr91
źródło
To był również mój problem. Czy widzisz node_modules? Czy widzisz plik tsconfig.json? Jeśli nie, otwórz nowe okno vsCode, zamknij stare okno, wybierz plik -> otwórz folder i upewnij się, że wybierasz folder nadrzędny srci node_moduleszamiast tylko src.
Kyle Vassella
3
  1. Otwórz VSkod.
  2. Naciśnij ctrl + przecinek
  3. Postępuj zgodnie ze wskazówkami na zrzucie ekranu
    1. Wyszukaj eksperymentalneDekoratory
    2. Edytuj to
Mostafa
źródło
2

Otwórz cały folder projektu zamiast nazwa-projektu / src

Plik tsconfig.json znajduje się poza folderem src

Andrew Yavorsky
źródło
1

Poprawiłem ostrzeżenie, usuwając „baseUrl”: „” z pliku tsconfig.json

D. Greene
źródło
1

Ten problem może wystąpić, jeśli otworzysz plik TS, który istnieje poza projektem. Na przykład używam lerny i miałem plik otwarty z innego pakietu. Chociaż ten drugi pakiet miał własny tsconfig z eksperymentalnymi dekoratorami, VsCode go nie honoruje.

sparebytes
źródło
1

Napotkałem ten sam problem podczas tworzenia usług iniekcyjnych w Angular 2. Mam wszystkie rzeczy w tsconfig.json. Nadal otrzymywałem ten błąd w linii ColorsImmutable.

@Injectable()
export class ColorsImmutable {

Naprawiono rejestrację Usługi na poziomie modułu lub poziomie komponentu za pomocą tablicy dostawców.

providers:[ColorsImmutable ],
Mohammad Javed
źródło
1

Jeśli używasz środowiska uruchomieniowego Deno JavaScript i TypeScript i włączysz eksperymentalneDecorators: true w tsconfig.json lub ustawieniach VSCode ide. To nie zadziała. Zgodnie z wymaganiami Deno, musisz podać tsconfig jako flagę podczas uruchamiania pliku Deno. Zobacz Opcje niestandardowego kompilatora TypeScript

W moim konkretnym przypadku przeprowadzałem test Deno i korzystałem z niego.

$ deno test -c tsconfig.json

Jeśli jest to plik, masz coś takiego

 $ deno run -c tsconfig.json mod.ts

mój tsconfig.json

{
  "compilerOptions": {
    "allowJs": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "module": "esnext"
  }
}
tksilicon
źródło
Już to robię, a jednak nie mam szczęścia, ponieważ stwierdzają w dokumentach, że eksperymentalne funkcje nie będą działać,
Ezzabuzaid
To będzie działać. Zobacz zaktualizowaną odpowiedź dokładnie na treść mojego pliku tsconfig.json. Następnie zobacz ten link github.com/manyuanrong/dso/issues/18
tksilicon
0

Dodałem tę opcję do tsconfig.json, "baseUrl": "front-end"Zastąp interfejs użytkownika nazwą twojego projektu angular -cli.

Sean Maxwell
źródło
0

Możesz także spróbować ng build. Właśnie przebudowałem aplikację i teraz nie jest zgodna.

Leandro hereñu
źródło
0

Okazuje się, że można to obejść, dopasowując nazwę modułu do nazwy pliku. Jeśli masz nazwę modułu BankSpec Specjalność, to nazwa pliku powinna wynosić. bank-speciality.module.ts

Neal Connolly
źródło
0

Wystąpił ten błąd, gdy utworzyłem nowy moduł i przeniosłem mój plik * .module.ts i * -routing.module.ts do innego folderu. Po usunięciu dwóch plików i utworzeniu modułu w nowym folderze działa idealnie. Środowisko Angular Version 9 i Angular CLI wersja 9.1.0

Yirga
źródło