2016-12-22 18 views
38

है मैंने पढ़ा कि कैसे टाइपस्क्रिप्ट module resolution काम करता है।मॉड्यूल 'मॉड्यूल-नाम' के लिए एक घोषणा फ़ाइल नहीं मिली। '/path/to/module-name.js' निहित रूप से 'कोई' प्रकार

मेरे पास निम्नलिखित भंडार है: ts-di। इस प्रकार एक निर्देशिका संरचना संकलन के बाद किया जाता है:

├── dist 
│   ├── annotations.d.ts 
│   ├── annotations.js 
│   ├── index.d.ts 
│   ├── index.js 
│   ├── injector.d.ts 
│   ├── injector.js 
│   ├── profiler.d.ts 
│   ├── profiler.js 
│   ├── providers.d.ts 
│   ├── providers.js 
│   ├── util.d.ts 
│   └── util.js 
├── LICENSE 
├── package.json 
├── README.md 
├── src 
│   ├── annotations.ts 
│   ├── index.ts 
│   ├── injector.ts 
│   ├── profiler.ts 
│   ├── providers.ts 
│   └── util.ts 
└── tsconfig.json 

मेरी package.json मैं "main": "dist/index.js" लिखा है।

import {Injector} from 'ts-di'; 

मॉड्यूल 'ts-डी' के लिए एक घोषणा फ़ाइल नहीं मिली:

Node.js सब कुछ ठीक काम करता है, लेकिन टाइपप्रति। '/path/to/node_modules/ts-di/dist/index.js' अंतर्निहित रूप से 'कोई' प्रकार है।

और फिर भी, अगर मैं आयात इस प्रकार है, तो सब कुछ काम करता है:

import {Injector} from '/path/to/node_modules/ts-di/dist/index.js'; 

क्या मैं गलत कर रहा हूँ?

उत्तर

32

यही लग रहा है जब आप दो दिनों के लिए बाहर देख रहे हैं और इस तरह से यह लगता है: बस package.json और सब कुछ में "main": "dist/index.js" से .js को दूर ठीक काम करता है!

"main": "dist/index", 

युपीडी: इस उत्तर के रिश्तेदार यदि आप अपने स्वयं NPM पैकेज है, अगर नहीं - my answer below देखते हैं।

और अगर इसका समाधान नहीं किया जवाब के ऊपर अपने मॉड्यूल आयात करते हैं, सिर्फ package.json में typings जोड़ने का प्रयास करें:

"main": "dist/index", 
"typings": "dist/index", 
बेशक

, यहाँ फ़ोल्डर dist - यह जहाँ आपके मॉड्यूल की फ़ाइलें संग्रहीत करता है।

+0

के लिए धन्यवाद वापस आकर अपने उत्तरों को पोस्ट करना :) – swyx

+0

मैं आपके प्रश्न और आपके उत्तर में इन आखिरी दिनों में कई बार आया था और मैं यह जोड़ना चाहता हूं कि जो कुछ मैं याद कर रहा था वह उन प्रकारों को एक .d.ts फ़ाइल में घोषित करना था, इसलिए, मेरे मामले में, स्थापित एन ode मॉड्यूल जो बिना प्रकार के आए थे (और मैं उनके प्रकार की स्पष्टीकरण स्थापित करने में असमर्थ था) ने उन्हें "फाइल मॉड्यूल" घोषित करके मॉड्यूल घोषित किया है, "मॉड्यूल घोषित करें" MYDesiredModule ' – Juan

65

एक और दो तरीके है, जब एक मॉड्यूल तुम्हारा नहीं है - बस स्थापित करने की कोशिश अपने @types से:

npm install -D @types/module-name 

या, यदि errored स्थापित - पुनर्लेखन importrequire करने की कोशिश:

// import * as yourModuleName from 'module-name'; 
const yourModuleName = require('module-name'); 
+5

यदि आपको नाम नहीं मिल सका टाइपस्क्रिप्ट 2.0 के लिए इसे चलाने की आवश्यकता है: 'npm @ प्रकार/नोड - सेव-देव' स्थापित करें – Ogglas

संबंधित मुद्दे