मैं पिछले कुछ घंटों से इस समस्या से जूझ रहा हूं और मुझे इंटरनेट पर कुछ भी नहीं मिल रहा है जो स्पष्ट रूप से, सरल अवधारणा को स्पष्ट रूप से समझाएगा।टाइपस्क्रिप्ट के लिए कस्टम वैश्विक इंटरफेस (.d.ts फ़ाइलें) को कॉन्फ़िगर कैसे करें?
मैं वर्तमान में एक ReactJS परियोजना जो Webpack2 और टाइपप्रति का उपयोग करता है पर काम कर रहा हूँ। सब कुछ एक चीज़ से पूरी तरह से काम करता है - मुझे इंटरफेस को स्थानांतरित करने का कोई तरीका नहीं मिल रहा है जिसे मैंने स्वयं को अलग फाइलों में लिखा है ताकि वे पूरे एप्लिकेशन के लिए दृश्यमान हों।
प्रोटोटाइपिंग मैं शुरू में था इंटरफेस है कि उन्हें इस्तेमाल फाइलों में परिभाषित किया लेकिन के लिए अंत में मैं कुछ है कि कई वर्गों में की जरूरत थी बढ़ने लगा और है कि जब सभी समस्याओं शुरू कर दिया है। कोई फर्क नहीं पड़ता कि मैं अपने tsconfig.json
में क्या परिवर्तन करता हूं और इससे कोई फर्क नहीं पड़ता कि मैंने फ़ाइलों को अपना आईडीई और वेबपैक कहां रखा है, दोनों नामों को ढूंढने में सक्षम नहीं होने के बारे में शिकायत करते हैं (Could not find name 'IMyInterface'
)।
यहाँ मेरे वर्तमान tsconfig.json
फ़ाइल है:
{
"compilerOptions": {
"baseUrl": "src",
"outDir": "build/dist",
"module": "commonjs",
"target": "es5",
"lib": [
"es6",
"dom"
],
"typeRoots": [
"./node_modules/@types",
"./typings"
],
"sourceMap": true,
"allowJs": true,
"jsx": "react",
"moduleResolution": "node",
"rootDir": "src",
"forceConsistentCasingInFileNames": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": false,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"noUnusedLocals": true
},
"exclude": [
"node_modules",
"build",
"scripts",
"acceptance-tests",
"webpack",
"jest",
"src/setupTests.ts"
],
"types": [
"typePatches"
]
}
आप देख सकते हैं, मेरे tsconfig.json
सभी स्रोत ./src
में, मैं ./typings
में .d.ts
फ़ाइलें अपने कस्टम रखा जाता है और यह शामिल है, परियोजना निर्देशिका की जड़ में है typeRoots
में।
मैं टाइपप्रति 2.1.6 और 2.2.0 और न काम करता है के साथ यह परीक्षण किया गया। यह सब काम करने के लिए प्राप्त करने की
एक तरह से src
और फिर import {IMyInterface} from 'typings/blah'
में मेरी typings
निर्देशिका स्थानांतरित करने के लिए है, लेकिन है कि मेरे पास सही महसूस नहीं करता है के रूप में यह कुछ मैं उपयोग करने की आवश्यकता नहीं है। मैं चाहता हूं कि उन इंटरफेस सिर्फ मेरे आवेदन में उपलब्ध 'जादुई' हों।
संपादित करें: यहां नमूने app.d.ts
फ़ाइल है:
interface IAppStateProps {
}
interface IAppDispatchProps {
}
interface IAppProps extends IAppStateProps, IAppDispatchProps {
}
मैं उन्हें export
या शायद declare
की जरूरत है? मुझे आशा है कि मुझे उन्हें नामस्थान में लपेटना पड़ेगा ?!
आप बिल्कुल सही हैं! यह पता चला कि मेरा मुद्दा था (जैसा कि आपने सुझाव दिया था) कि मैं अपनी घोषणा फाइलों में अन्य फाइलों से कक्षाएं/इंटरफेस आयात कर रहा था। जैसे ही मैंने उन आयातों को हटा दिया और केवल स्वच्छ 'इंटरफ़ेस Foo {} 'घोषणाओं को छोड़ दिया सब कुछ काम किया। ग्लोबल्स के अनुसार - मैं पूरी तरह से देखता हूं कि क्यों घोषणाएं जादुई रूप से उपलब्ध हैं, एक बुरा अभ्यास है और एक कस्टम मॉड्यूल पर स्विच करने पर विचार कर रहा हूं (वास्तव में 'मॉड्यूल MyApp {निर्यात इंटरफ़ेस Foo {}} 'घोषित करने की कोशिश की और इसे सफलतापूर्वक आयात करके आयात कर सकता है 'MyApp' से आयात {{Foo}) लेकिन अब के लिए जादू मेरे लिए काम करता है :) – Andris
धन्यवाद, आपके उत्तर बहुत सारे हैं! – jasonslyvia