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?


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.


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


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


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


32

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

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

25

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

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

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


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


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


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"
    ]
}


9

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

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

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.



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.


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.


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"

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.


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

2

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

Plik tsconfig.json znajduje się poza folderem src


1

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


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.


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 ],

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

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.


0

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


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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.