टाइपस्क्रिप्ट त्रुटि TS2304: नाम नहीं मिल सकता है 'की आवश्यकता'


463

मैं अपना पहला टाइपस्क्रिप्ट और निश्चित रूप से Node.js एप्लिकेशन को अप और रन करने और कुछ त्रुटियों में चलाने की कोशिश कर रहा हूं।

जब मैं एक सरल टाइपस्क्रिप्ट Node.js पृष्ठ को ट्रांसपाइल करने का प्रयास करता हूं तो मुझे "TS2304: नाम की आवश्यकता नहीं है" मिल रही है। मैंने स्टैक ओवरफ्लो पर इस त्रुटि की कई अन्य घटनाओं के माध्यम से पढ़ा है, और मुझे नहीं लगता कि मेरे पास समान मुद्दे हैं। मैं कमांड प्रॉम्प्ट खोल रहा हूँ:

tsc movie.server.model.ts.

इस फ़ाइल की सामग्री हैं:

'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';

त्रुटि var mongoose=require('mongoose')लाइन पर डाली गई है ।

टाइपिंग / tsd.d.ts फ़ाइल की सामग्री हैं:

/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />

.D.ts फ़ाइल संदर्भ को उचित फ़ोल्डर में रखा गया था और कमांड द्वारा टाइपिंग / tsd.d.ts में जोड़ा गया था:

tsd install node --save
tsd install require --save

उत्पादित .js फ़ाइल ठीक काम करती है, इसलिए मैं त्रुटि को अनदेखा कर सकता हूं। लेकिन मैं जानना चाहूंगा कि यह त्रुटि क्यों होती है और मैं क्या गलत कर रहा हूं।


1
when I attempt to transpile a simple ts node page<आप कैसे ट्रांसप्लान कर रहे हैं ... कौन सी उपयोगिता
बेसरात

1
मैं सिर्फ कमांड टाइप करके कमांड लाइन पर चल रहा हूं: tsc movie.server.model.ts। FWIW यह एक मैक पर है।
जेरीकुर

1
IDE I में Visual Studio कोड का उपयोग करने पर भी यही समस्या आई। मैं इसे अपने अन्य IDE, IntelliJ की कोशिश करूंगा। मैंने मान लिया कि कमांड लाइन को छोड़ना इस मुद्दे का परीक्षण करने का सबसे साफ तरीका था।
जेरीकेर जूल


कैसे के बारे में import { mongoose } from 'mongoose'?
फिस्ना

जवाबों:


744

जल्दी और गन्दी

यदि आपके पास केवल एक फ़ाइल का उपयोग करने की आवश्यकता है, या आप डेमो उद्देश्यों के लिए ऐसा कर रहे हैं, तो आप अपनी टाइपस्क्रिप्ट फ़ाइल के शीर्ष पर आवश्यकता को परिभाषित कर सकते हैं।

declare var require: any

टाइपस्क्रिप्ट 2.x

यदि आप टाइपस्क्रिप्ट 2 का उपयोग कर रहे हैं। तो आपको अब टाइपिंग या निश्चित रूप से टाइप करने की आवश्यकता नहीं है। बस निम्नलिखित पैकेज स्थापित करें।

npm install @types/node --save-dev

घोषणा फाइलों का भविष्य (6/15/2016)

टाइपिंग और tsd जैसे उपकरण काम करना जारी रखेंगे, और हम उन समुदायों के साथ मिलकर काम करेंगे जो एक सुचारु संक्रमण सुनिश्चित कर सकें।

अपने src /tsconfig.app.json को सत्यापित या संपादित करें ताकि इसमें निम्नलिखित शामिल हों:

...
"types": [ "node" ],
"typeRoots": [ "../node_modules/@types" ]
...

सुनिश्चित करें कि src फ़ोल्डर में फ़ाइल है और रूट ऐप फ़ोल्डर पर कोई भी नहीं है।

डिफ़ॉल्ट रूप से, @types के अंतर्गत कोई भी पैकेज आपके बिल्ड में पहले से ही शामिल है जब तक कि आपने इनमें से कोई भी विकल्प निर्दिष्ट नहीं किया है। अधिक पढ़ें

टाइपस्क्रिप्ट 1.x

टाइपिंग का उपयोग करके (निश्चित रूप से टेडपेड प्रतिस्थापन) आप एक परिभाषा को सीधे GitHub रिपॉजिटरी से निर्दिष्ट कर सकते हैं।

टंकण स्थापित करें

npm install typings -g --save-dev

जरूर लिखें टाइप्स को जरूर लिखें

typings install dt~node --save --global

Webpack

यदि आप अपने निर्माण उपकरण के रूप में वेबपैक का उपयोग कर रहे हैं तो आप वेबपैक प्रकारों को शामिल कर सकते हैं।

npm install --save-dev @ प्रकार / वेबपैक-एनवी

tsconfig.jsonनिम्नलिखित के साथ अपने अद्यतन compilerOptions:

"types": [
      "webpack-env"
    ]

यह आपको करने की अनुमति देता है require.ensureऔर अन्य वेबपैक विशिष्ट कार्य करता है।

कोणीय सीएलआई

सीएलआई के साथ आप ऊपर दिए गए वेबपैक चरण का अनुसरण कर सकते हैं और अपने "प्रकार" ब्लॉक को जोड़ सकते हैं tsconfig.app.json

वैकल्पिक रूप से, आप पूर्वस्थापित nodeप्रकारों का उपयोग कर सकते हैं । ध्यान रखें कि इसमें आपके क्लाइंट-साइड कोड में अतिरिक्त प्रकार शामिल होंगे जो वास्तव में उपलब्ध नहीं हैं।

"compilerOptions": {
    // other options
    "types": [
      "node"
    ]
  }

4
क्यों नहीं "टाइपिंग स्थापित करें - सेव - गंभीर की आवश्यकता है"?
कुटोमर

1
मुझे इसके साथ एक त्रुटि मिलती है Unable to find "require" ("npm") in the registry। क्या नोडजेएस टाइपिंग के एक बड़े सेट का हिस्सा होना चाहिए?
दिक्

7
मैं इसे गलत मानता हूं क्योंकि इसके लिए जरूरी जेईजे के लिए टाइपिंग से संबंधित है, नोड का निर्माण नहीं है require। शायद ES5 आउटपुट लक्ष्य के कुछ भिन्नता के लिए इसका सही उत्तर है लेकिन सामान्य मामला नहीं है।
22

1
कृपया जोर्डन अवेंजर को देखें। मेरे मामले में मैंने निम्नलिखित @types स्थापित किया था इसलिए मैंने जोड़ा -> "प्रकार": ["नोड", "es6-वादा", "कोर-जेएस", "चमेली"] <- tsffig.json में संकलक के लिए
Lothre1

1
@Seagull @types/nodeटाइपस्क्रिप्ट परिभाषाएँ हैं। नोड में ये शामिल नहीं हैं, और न ही उन्हें होना चाहिए।
cgatian

103

टाइपस्क्रिप्ट 2.x के लिए , अब दो चरण हैं:

  1. एक पैकेज स्थापित करें जो परिभाषित करता है require। उदाहरण के लिए:

    npm install @types/node --save-dev
  2. टाइपस्क्रिप्ट को इसे विश्व स्तर पर शामिल करने के लिए कहें tsconfig.json:

    {
        "compilerOptions": {
            "types": ["node"]
        }
    }

दूसरा चरण केवल तभी महत्वपूर्ण है जब आपको विश्व स्तर पर उपलब्ध कार्यों जैसे कि उपयोग की आवश्यकता हो require। अधिकांश पैकेजों के लिए, आपको सिर्फ import package from 'package'पैटर्न का उपयोग करना चाहिए । ऊपर tsconfig.json प्रकार सरणी में प्रत्येक पैकेज को शामिल करने की कोई आवश्यकता नहीं है।


1
आप या तो कुछ es5 github.com/Microsoft/TypeScript/wiki/… Eq: "lib": ["dom", "es5", "es2015.promise", "es2015 .collection"] के लिए lib का उपयोग कर सकते हैं
Leo Caseiro

जोड़ने के बाद "types": ["jasmine", "hammerjs"]करने के लिए tsconfig.jsमैं जोड़ने के लिए खड़ी रेखा से हटना nodeसाथ ही। धन्यवाद जॉर्डन।
मिकुमस सिप

जब मैं इस सलाह का पालन करता हूं, तो यह मेरे सभी आयातों को तोड़ देता है। उदाहरण के लिए, import express from "express";अब मुझे बता रहा है कि मुझे इसके लिए @ प्रकार / एक्सप्रेस स्थापित करने या एक .d.ts फ़ाइल जोड़ने का प्रयास करने की आवश्यकता है।
austinthemassiveive

4
आप और अधिक है, तो @types/...सिर्फ @types/nodeफ़ोल्डर न जोड़ें "types": ["node"]में tsconfig.jsonक्योंकि टाइपप्रति compiller अन्य नहीं उल्लेख किया संकुल छोड़ देगा। इससे आपके IDE प्रकार हल हो जाएंगे। यह यहाँ लिखा है typescriptlang.org/docs/handbook/...
Marecky

यह समाधान समस्याओं के बिना एक आयनिक परियोजना में मेरे लिए काम करता है, धन्यवाद :)
फ्रैंक सैंडी

71

आप ऐसा कर सकते हैं

declare var require: any

या, अधिक व्यापक समर्थन के लिए, निश्चित रूप से आवश्यक है

इसके अलावा, आप के बजाय var mongoose = require('mongoose')निम्नलिखित कोशिश कर सकते हैं

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')

1
use strictटाइपस्क्रिप्ट में उपयोग करने के बारे में: बेसरात उत्तर और टाइपस्क्रिप्ट फ़ाइल में "स्ट्रिक्ट यूज़" की आवश्यकता है? use strictटाइपस्क्रिप्ट में इसका उपयोग करना आवश्यक है ।
यूजीन बिचेल

हम्म, उस उत्तर के अनुसार यह आवश्यक नहीं है, लेकिन उपयोग करने के लिए फायदेमंद हो सकता है "use strict", मैं अपना उत्तर संपादित करूँगा
'ᆼ 15

डिक्लेयर var का उपयोग करना वास्तविक समस्या को ठीक नहीं कर रहा है; बस इसे छिपा रहा हूँ।
मेरा स्टैक ओवरफ्लोएथ

@ ठीक है, ध्यान रखें कि यह 2015 से है, और यह भी, मैं तर्क देता हूं कि इसे ठीक करने के लिए कोई "समस्या" नहीं है। टाइपस्क्रिप्ट 2.0 अब पाठ्यक्रम के इस सुरुचिपूर्ण तरीके से हल करता है
। ᆼ '

12

इस उत्तर आधुनिक व्यवस्था से संबंधित है (टाइपप्रति 2.x, Webpack > 2.x)

आपको @ प्रकार / नोड स्थापित करने की आवश्यकता नहीं है (जो कि सभी Node.js प्रकार के हैं और फ्रंट-एंड कोड के लिए अप्रासंगिक हैं, वास्तव में सेटटिमूट अलग रिटर्न मान आदि जैसी चीजों को जटिल करते हैं)।

आप कर स्थापित करने के लिए @ प्रकार की जरूरत / webpack-env

npm i -D @types/webpack-env

जो क्रम हस्ताक्षर Webpack (सहित है कि देता है require, require.ensureआदि)

यह भी सुनिश्चित करें कि आपकी tsconfig.json फ़ाइल में कोई सेट 'प्रकार' सरणी नहीं है -> जो आपके नोड_मॉडल / @ प्रकार के फ़ोल्डर में सभी प्रकार की परिभाषाओं को पिकअप कर देगा।

यदि आप प्रकारों की खोज को प्रतिबंधित करना चाहते हैं, तो आप type_oot property को node_modules / @ प्रकार पर सेट कर सकते हैं।


1
यह महत्वपूर्ण टिप्पणी है यह भी सुनिश्चित करें कि आपके tsconfig.json का कोई सेट 'प्रकार' सरणी नहीं है -> जो इसे आपके नोड_मॉडल / @ प्रकार के फ़ोल्डर में सभी प्रकार की परिभाषाओं को पिकअप कर देगा
मार्केडी

क्या वेबपैक दृष्टिकोण के साथ किसी अन्य चरण की आवश्यकता है? मैं एक संकलन त्रुटि `त्रुटि TS2580 मिलती है: नहीं खोजा जा सका नाम 'require'.`
jaycer

10

के बजाय:

'use strict';

/// <reference path="typings/tsd.d.ts" />

प्रयत्न:

/// <reference path="typings/tsd.d.ts" />

'use strict';

पहले संदर्भ पथ।


काम करता है, लेकिन गंदे IMO - यह मूल रूप से त्रुटि को ठीक करने के बजाय छुपाता है। डेमो और क्विक स्क्रिप्ट के लिए बिल्कुल सही, लेकिन प्रोडक्शन के लिए नहीं
नीनो फीलू

8

मेरे मामले में, यह एक सुपर बेवकूफ समस्या थी, जहां src/tsconfig.app.jsontsconfig.json सेटिंग ओवरराइड कर रही थी ।

तो, मेरे पास यह था tsconfig.json:

    "types": [
      "node"
    ]

और यह एक में src/tsconfig.app.json:

    "types": []

मुझे आशा है कि किसी को यह मददगार लगता है, क्योंकि यह त्रुटि मुझे भूरे बाल पैदा कर रही थी।


8

केवल संदर्भ के लिए, मैं कोणीय 7.1.4 , टाइपस्क्रिप्ट 3.1.6 का उपयोग कर रहा हूं , और केवल एक चीज जो मुझे करने की आवश्यकता है, वह है tsconfig.json:

    "types": ["node"], // within compilerOptions

वह किया। फिर भी यह त्रुटि मिली: नाम की आवश्यकता नहीं है। क्या आपको नोड के लिए टाइप परिभाषाएँ स्थापित करने की आवश्यकता है? कोशिश करें npm i @types/nodeऔर फिर nodeअपने tsconfig में टाइप फ़ील्ड में जोड़ें। - npm स्थापित किया।
सूइस

7

मैंने पाया कि समाधान TSD कमांड का उपयोग करना था:

tsd install node --save

जो typings/tsd.d.tsफ़ाइल को जोड़ता / अद्यतित करता है और उस फ़ाइल में सभी प्रकार की परिभाषाएँ होती हैं जो कि नोड अनुप्रयोग के लिए आवश्यक होती हैं।

मेरी फ़ाइल के शीर्ष पर, मैंने tsd.d.tsइस तरह से एक संदर्भ दिया :

/// <reference path="../typings/tsd.d.ts" />

आवश्यकता जनवरी 2016 के अनुसार इस प्रकार परिभाषित की गई है:

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}

मुझे 404 नहीं मिला
बोरमट

5

मैंने जोड़ने के लिए पीटर वर्गा के उत्तर को लिया declare var require: any;और इसे एक जेनेरिक समाधान में बनाया, जो प्रीप्रोसेस-लोडर का उपयोग करके सभी .ts फ़ाइलों के लिए काम करता है :

  1. प्रीप्रोसेसर-लोडर स्थापित करें:

    npm install preprocessor-loader
  2. लोडर को अपने webpack.config.js में जोड़ें (मैं टाइपस्क्रिप्ट संसाधन के प्रसंस्करण के लिए ts- लोडर का उपयोग कर रहा हूं ):

    module: {
        loaders: [{
            test: /\.tsx?$/,
            loader: 'ts-loader!preprocessor?file&config=preprocess-ts.json'
        }]
    }
  1. कॉन्फ़िगरेशन जोड़ें जो हर स्रोत में वर्कअराउंड जोड़ देगा:
{
    "line": false,
    "file": true,
    "callbacks": [{
        "fileName": "all",
        "scope": "source",
        "callback": "(function shimRequire(source, fileName) { return 'declare var require: any;' + source; })"
    }]
}

आप उसी तरह से अधिक मजबूत requirement.d.ts को जोड़ सकते हैं , लेकिन declare var require: any;मेरी स्थिति में पर्याप्त था।

ध्यान दें, प्रीप्रोसेसर 1.0.5 में एक बग है , जो अंतिम पंक्ति को काटता है, इसलिए बस सुनिश्चित करें कि आपके पास अंत में एक अतिरिक्त पंक्ति स्थान है और आप ठीक हो जाएंगे।


1
इसे क्यों ठुकरा दिया गया? यह प्रश्न का उत्तर देता है और तालिका में कुछ नया और महत्वपूर्ण लाता है। अब आपको ट्रांसपिलर और वेबपैक को संतुष्ट करने के लिए हर फाइल को व्यक्तिगत रूप से जमा करने की आवश्यकता नहीं है।
बेनी बोटेमा

क्या आप चरण 3 को अधिक समझा सकते हैं? मैं एक newb हूँ और यह नहीं जानता कि इस कॉन्फ़िगरेशन कोड को कहाँ रखा जाए।
user441058

@ user441058, GitHub पेज को चेकआउट करें , चरण 3 प्रीप्रोसेस-लोडर के लिए मुख्य कॉन्फ़िगरेशन के बारे में है।
बेनी बोटेमा

2

मैं इस मुद्दे से भी जूझ रहा हूं। मेरा मानना ​​है कि यह सभी रिलीज उम्मीदवारों उर्फ आरसी के लिए काम करता है, लेकिन मैंने परीक्षण नहीं किया है। के लिए @angular rc.2 यह अच्छी तरह से काम करता है।

  1. core-jsमें npm निर्भरता के रूप में जोड़ेंpackage.json
  2. Daud typings install core-js --save
  3. "es6-shim"अपने में सभी घटनाओं को हटा दें package.json। अब आपको इसकी आवश्यकता नहीं है

चीयर्स!


कोर-जेएस टाइपिंग के लिए क्या है? नोड के लिए विशिष्ट?
dcsan



2

शायद ही कभी tsconfig.json से "चमेली" गायब हो, यह त्रुटि हो सकती है। (टाइपस्क्रिप्ट 2. X)

इसलिए जोड़ें

"types": [
  "node",
  "jasmine"
]

आपकी tsconfig.jsonफ़ाइल पर।


2

इलेक्ट्रॉन + कोणीय 2/4 जोड़:

विभिन्न फ़ाइलों को ts.config करने के लिए 'नोड' प्रकार को जोड़ने के शीर्ष पर, आखिरकार मेरे लिए जो काम किया वह typings.d.tsफाइल के बगल में जोड़ रहा था :

declare var window: Window;
interface Window {
  process: any;
  require: any;
}

ध्यान दें कि मेरा मामला इलेक्ट्रॉन + कोणीय 2/4 के साथ विकसित हो रहा है। मुझे वैश्विक पर खिड़की की आवश्यकता थी।


2

मेरे लिए यह कोणीय कंपाइलर विकल्पों में प्रकार जोड़कर हल किया जाता है ।

"angularCompilerOptions": {
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"types": [ "node" ]
}

यह tsconfig.json में किसी के लिए भी जानना चाहता है।
स्टीफन ज़ेंग

1
यह कोणीय 9 के लिए है
अरुण

1
  1. क्या आपने कोड ट्रांसपाइल करने के लिए किस मॉड्यूल का उपयोग किया है?
    tsc --target es5 --module commonjs script.ts
    आपको ट्रांसपॉइलर को यह बताने के लिए करना होगा कि आप NodeJS कोड का संकलन कर रहे हैं। डॉक्स

  2. आपको मानगो परिभाषाएँ भी स्थापित करनी होंगी
    tsd install mongoose --save

  3. varवेरिएबल घोषित करने के लिए उपयोग न करें (जब तक आवश्यक न हो, जो बहुत दुर्लभ मामला है), letइसके बजाय का उपयोग करें । इसके बारे में और जानें


1

बस टाइपस्क्रिप्ट 1.x के लिए cgatian के जवाब के अलावा

यदि आप अभी भी त्रुटियां देख रहे हैं, तो कृपया विशेष रूप से अपने संकलक विकल्पों में index.d.ts प्रदान करें।

"files": [
    "typings/index.d.ts"
]

1

मैं ऊपर दिए गए किसी भी चाल का उपयोग करके 'आवश्यकता' त्रुटि को दूर नहीं कर सका।

लेकिन मुझे पता चला कि मुद्दा यह था कि विजुअल स्टूडियो के लिए मेरे टाइपस्क्रिप्ट टूल जहां एक पुराना संस्करण (1.8.6.0) और आज का नवीनतम संस्करण (2.0.6.0) है।

आप टूल का नवीनतम संस्करण डाउनलोड कर सकते हैं:

Visual Studio 2015 के लिए टाइपस्क्रिप्ट


1

यदि आप कोड संकलित कर सकते हैं, लेकिन विज़ुअल स्टूडियो 2015 के निशान के लिए 'फ़ंक्शन' की आवश्यकता होती है क्योंकि त्रुटि पाठ के साथ त्रुटियों को नाम की आवश्यकता नहीं हो सकती है या प्रतीक 'आवश्यकता' को हल नहीं कर सकता है , तो Visual Studio 2015 के लिए टाइपस्क्रिप्ट को नवीनतम संस्करण में अद्यतन करें (फिलहाल 2.1)। ५) और कम से कम २०१६.३.२ संस्करण के लिए ReSharper (यदि आप इसका उपयोग करते हैं) को अपडेट करें।

मुझे थोड़ी देर के लिए यह कष्टप्रद समस्या थी और कोई समाधान नहीं मिल सका, लेकिन मैंने आखिरकार इसे इस तरह से हल किया।


1

निम्नलिखित को इसमें जोड़ें tsconfig.json:

"typeRoots": [ "../node_modules/@types" ]

2
यह @ cgatian के उत्तर में पहले ही उल्लेख किया गया है ।
तुओमास्तिक

@catatian ने "node_modules / @ प्रकार" का उल्लेख किया है जबकि मैंने "../node_modules/@types" का उल्लेख किया है।
दर्शन बल्लाल

1

मेरे पास अभी तक एक और उत्तर है जो पिछले सभी पर बनाता है जो वर्णन करता है npm install @types/nodeऔर जिसमें शामिल nodeहैtsconfig.json / compilerOptions / types

मेरे मामले में, मेरे पास एक बेस tsConfig.jsonऔर कोणीय अनुप्रयोग में एक अलग है जो इस एक को बढ़ाता है:

{
    "extends": "../../tsconfig.json",
    "compilerOptions": {
        "outDir": "../out-tsc/app",
        "types": []
 },

मेरी समस्या typesइस में खाली थी tsconfi.app.json- यह आधार विन्यास में एक को देखता है।


-2

यदि आप एक .ts फ़ाइल में इस समस्या का सामना कर रहे हैं जो आपको केवल कुछ निरंतर मूल्य प्रदान करने के लिए है, तो आप बस कर सकते हैं

अपनी .ts फ़ाइल को .js फ़ाइल में बदलें

और त्रुटि फिर से नहीं आएगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.