Usiłuję uruchomić moją pierwszą aplikację TypeScript i DefinatelyTyped Node.js i napotkałem pewne błędy.
Podczas próby transponowania prostej strony TypeScript Node.js pojawia się błąd „TS2304: Nie można znaleźć nazwy„ wymagają ””. Przeczytałem kilka innych wystąpień tego błędu w przepełnieniu stosu i nie sądzę, że mam podobne problemy. Uruchamiam w wierszu poleceń polecenie:
tsc movie.server.model.ts.
Zawartość tego pliku to:
'use strict';
/// <reference path="typings/tsd.d.ts" />
/* movie.server.model.ts - definition of movie schema */
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var foo = 'test';
Błąd jest generowany na var mongoose=require('mongoose')
linii.
Zawartość pliku typings / tsd.d.ts to:
/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />
Odwołania do plików .d.ts zostały umieszczone w odpowiednich folderach i dodane do typings / tsd.d.ts za pomocą poleceń:
tsd install node --save
tsd install require --save
Wydany plik .js wydaje się działać dobrze, więc mogłem zignorować błąd. Byłbym wdzięczny, wiedząc, dlaczego ten błąd występuje i co robię źle.
źródło
when I attempt to transpile a simple ts node page
<jak się transpilujesz ... które narzędzieimport { mongoose } from 'mongoose'
?Odpowiedzi:
Szybko i brudno
Jeśli używasz tylko jednego pliku, lub robisz to w celach demonstracyjnych, możesz zdefiniować wymaganie na górze pliku TypeScript.
TypeScript 2.x
Jeśli używasz TypeScript 2.x, nie musisz już mieć zainstalowanych Typings lub Definitywnie Typed. Wystarczy zainstalować następujący pakiet.
Przyszłość plików deklaracji (15.06.2016)
Sprawdź lub edytuj plik src /tsconfig.app.json, aby zawierał następujące elementy:
Upewnij się, że plik znajduje się w folderze src, a nie w folderze głównym aplikacji.
Domyślnie każdy pakiet poniżej @types jest już uwzględniony w twojej kompilacji, chyba że podasz jedną z tych opcji. Czytaj więcej
TypeScript 1.x
Używając typografii (zastąpienie DefinitelyTyped), możesz określić definicję bezpośrednio z repozytorium GitHub.
Zainstaluj pisma
Zainstaluj definicję typu wymagaJS z repozytorium DefinitelyType
Webpack
Jeśli używasz pakietu Webpack jako narzędzia kompilacji, możesz uwzględnić typy pakietu Webpack.
npm install --save-dev @ types / webpack-env
Zaktualizuj swój
tsconfig.json
za pomocą następujących wcompilerOptions
:Umożliwia to wykonywanie
require.ensure
innych funkcji specyficznych dla pakietu Webpack.Angular CLI
Dzięki CLI możesz wykonać powyższy krok pakietu Webpack i dodać blok „typów” do swojego
tsconfig.app.json
.Alternatywnie możesz użyć wstępnie zainstalowanych
node
typów. Pamiętaj, że będzie to obejmować dodatkowe typy kodu po stronie klienta, które nie są tak naprawdę dostępne.źródło
Unable to find "require" ("npm") in the registry
. Czy wymaga części większego zestawu typów nodeJS?require
. być może jest to właściwa odpowiedź na niektóre warianty docelowego wyjścia ES5, ale nie na ogólny przypadek.@types/node
to definicje TypeScript. Węzeł nie obejmuje ich, a także nie powinien.W przypadku TypeScript 2.x są teraz dwa kroki:
Zainstaluj pakiet, który definiuje
require
. Na przykład:Powiedz TypeScript, aby umieścił go globalnie w
tsconfig.json
:Drugi krok jest ważny tylko wtedy, gdy potrzebujesz dostępu do globalnie dostępnych funkcji, takich jak
require
. W przypadku większości pakietów powinieneś po prostu użyćimport package from 'package'
wzorca. Nie ma potrzeby dołączania każdego pakietu do powyższej tablicy typów tsconfig.json.źródło
"types": ["jasmine", "hammerjs"]
dotsconfig.js
muszę również dodaćnode
. Dzięki Jordan.import express from "express";
mówi mi teraz, że muszę spróbować zainstalować @ typy / express lub dodać dla niego plik .d.ts.@types/...
niż tylko@types/node
folder nie sumują"types": ["node"]
siętsconfig.json
, ponieważ maszynopis compiller będzie pomijać inne nie wymienione pakiety. Spowoduje to przerwanie rozwiązywania typów IDE. Jest napisane tutaj typescriptlang.org/docs/handbook/...Możesz
Lub, aby uzyskać bardziej kompleksowe wsparcie, skorzystaj z pliku Def.dit
Zamiast tego
var mongoose = require('mongoose')
możesz wypróbować następująceźródło
use strict
w TypeScript: odpowiedź w formacie Basarat i „Use Strict” potrzebne w pliku TypeScript? . Konieczne jest użycieuse strict
w TypeScript."use strict"
,Ta odpowiedź dotyczy nowoczesnych konfiguracji (TypeScript 2.x, Webpack > 2.x)
Państwo nie trzeba instalować @ rodzai / węzeł (co jest wszystkich rodzajów node.js i nie ma znaczenia dla kodu front-end, faktycznie komplikowania rzeczy takie jak setTimout wartości różnią się w obie strony, etc ..
Ci zrobić konieczność instalowania @ typów / WebPack-ENV
npm i -D @types/webpack-env
co daje podpisy uruchomieniowe że WebPACK ma (w tym
require
,require.ensure
etc.)Upewnij się także, że plik tsconfig.json nie ma ustawionej tablicy „types” ->, dzięki czemu będzie pobierał wszystkie definicje typów w folderze node_modules / @ types.
Jeśli chcesz ograniczyć wyszukiwanie typów, możesz ustawić właściwość typeRoot na node_modules / @ types.
źródło
Zamiast:
Próbować:
tzn. najpierw ścieżka odniesienia.
źródło
W moim przypadku był to bardzo głupi problem
src/tsconfig.app.json
przesłaniało totsconfig.json
ustawienie.Miałem to w
tsconfig.json
:A ten w
src/tsconfig.app.json
:Mam nadzieję, że ktoś uzna to za pomocne, ponieważ ten błąd powodował u mnie siwe włosy.
źródło
Dla porównania używam Angular 7.1.4 , TypeScript 3.1.6 i jedyne, co muszę zrobić, to dodać tę linię
tsconfig.json
:źródło
npm i @types/node
a następnie dodajnode
do pola typów w swoim tsconfig. - zainstalowałem npm.Odkryłem, że rozwiązaniem było użycie polecenia TSD:
Który dodaje / aktualizuje
typings/tsd.d.ts
plik, a ten plik zawiera wszystkie definicje typów wymagane dla aplikacji węzła.W górnej części mojego pliku umieszczam odniesienie do
tsd.d.ts
następującego:Wymaganie jest zdefiniowane w ten sposób od stycznia 2016 r .:
źródło
Wziąłem odpowiedź Petera Varga, aby dodać
declare var require: any;
i uczyniłem z niej ogólne rozwiązanie, które działa ogólnie dla wszystkich plików .ts przy użyciu modułu ładującego preprocess :zainstaluj moduł ładujący preprocesora:
dodaj moduł ładujący do pliku webpack.config.js (używam programu ts-loader do przetwarzania źródeł TypeScript):
Możesz dodać bardziej wymagające wymagania.d.ts w ten sam sposób, ale
declare var require: any;
w mojej sytuacji było to wystarczające.Uwaga: w preprocesorze 1.0.5 występuje błąd , który odcina ostatnią linię, więc upewnij się, że na końcu masz dodatkowy znak odstępu linii i wszystko będzie dobrze.
źródło
Walczę również z tym problemem. Wierzę, że to działa na wszystkich kandydatów do wydania, czyli rc, ale nie testowałem. Dla @angular rc.2 działa dobrze.
core-js
jako zależność npm wpackage.json
typings install core-js --save
"es6-shim"
wystąpienia w swoimpackage.json
. Już tego nie potrzebujesz.Twoje zdrowie!
źródło
Upewnij się, że masz zainstalowany
npm i @types/node
źródło
import * jako mongoose z „mongoose”
źródło
Czasami brakuje „jaśminu” z tsconfig.json może powodować ten błąd. (TypeScript 2.X)
Więc dodaj
do twojego
tsconfig.json
pliku.źródło
Dodatek Electron + Angular 2/4:
Oprócz dodania typu „węzła” do różnych plików ts.config, ostatecznie zadziałało dla mnie dodanie następnego do
typings.d.ts
pliku:Zauważ, że mój przypadek rozwija się z Electron + Angular 2/4. Potrzebowałem wymagania globalnego okna.
źródło
Dla mnie jest to rozwiązane przez dodanie typów do opcji kompilatora kątowego.
źródło
Czy określiłeś, którego modułu użyć do transponowania kodu?
tsc --target es5 --module commonjs script.ts
Musisz to zrobić, aby poinformować transpiler, że kompilujesz kod NodeJS. Docs .
Musisz także zainstalować definicje mangusty
tsd install mongoose --save
Nie używaj
var
do deklarowania zmiennych (chyba że jest to konieczne, co jest bardzo rzadkim przypadkiem), użyjlet
zamiast tego. Dowiedz się więcej na ten tematźródło
Oprócz odpowiedzi cgatian, dla TypeScript 1.x
Jeśli nadal widzisz błędy, podaj indeks.d.ts w opcjach kompilatora.
źródło
Nie mogłem dostać błędu „wymagaj”, aby odejść, używając jednej z powyższych sztuczek.
Ale odkryłem, że problem polegał na tym, że moje narzędzia TypeScript do Visual Studio, w których jest stara wersja (1.8.6.0) i najnowsza wersja na dzień dzisiejszy (2.0.6.0).
Możesz pobrać najnowszą wersję narzędzi z:
TypeScript for Visual Studio 2015
źródło
Jeśli możesz skompilować kod, ale znaki Visual Studio 2015 „wymagają” działają, ponieważ błędy z tekstem błędu nie mogą znaleźć nazwy „wymagają” lub nie mogą rozwiązać symbolu „wymagają” , zaktualizuj TypeScript dla Visual Studio 2015 do najnowszej wersji (w tej chwili 2.1. 5) i zaktualizuj ReSharper (jeśli go używasz) co najmniej do wersji 2016.3.2.
Przez jakiś czas miałem ten irytujący problem i nie mogłem znaleźć rozwiązania, ale w końcu rozwiązałem go w ten sposób.
źródło
Dodaj następujące elementy
tsconfig.json
:źródło
Mam jeszcze jedną odpowiedź, która opiera się na wszystkich poprzednich, które opisują
npm install @types/node
i włączającnode
wtsconfig.json / compilerOptions / types
.W moim przypadku mam podstawową
tsConfig.json
i osobną w aplikacji Angular, która rozszerza tę:Mój problem polegał na
types
tym, że jest pustytsconfi.app.json
- blokuje ten w konfiguracji podstawowej.źródło
Jeśli masz do czynienia z tym problemem w pliku .ts, który jest tylko po to, aby zapewnić ci stałe wartości, możesz po prostu
i błąd nie pojawi się ponownie.
źródło