ए) आप कह रहे हैं के रूप में, वहाँ एक सरल (नहीं सबसे अच्छा) का उपयोग करने आवश्यकता विकल्प है:
const css = require('./component.css')
- हम की जरूरत है
require
के लिए टाइपिंग के रूप में यह टाइपस्क्रिप्ट में मानक सुविधा नहीं है।
सरल इस विशिष्ट के लिए टाइपिंग की आवश्यकता हो सकती है:
declare function require(name: string): string;
Webpack तो टाइपप्रति और उपयोग मॉड्यूल संकलन होगा ठीक से - लेकिन निर्माण के लिए किसी भी आईडीई और वर्ग के नाम जांच के बिना।
बी) वहाँ मानक आयात उपयोग करने के लिए बेहतर समाधान है:
import * as css from './component.css'
- पूर्ण वर्ग के नाम के लिए सक्षम बनाता IntelliSense
- की आवश्यकता है प्रत्येक सीएसएस फ़ाइल के लिए प्रकार परिभाषा, अन्यथा
tsc
संकलक असफल हो जाएगा
उचित IntelliSense के लिए, Webpack प्रत्येक सीएसएस फ़ाइल के लिए प्रकार परिभाषा उत्पन्न करने के लिए की जरूरत है:
webpack उपयोग typings-for-css-modules-loader
webpackConfig.module.loaders: [
{ test: /\.css$/, loader: 'typings-for-css-modules?modules' }
{ test: /\.scss$/, loader: 'typings-for-css-modules?modules&sass' }
];
लोडर अपने codebase में सीएसएस फ़ाइलों से प्रत्येक के लिए *.css.d.ts
फ़ाइलें उत्पन्न होगा
- टाइपस्क्रिप्ट कंपाइलर समझ जाएगा कि सीएसएस आयात प्रकार स्ट्रिंग के गुण (वर्ग नाम) के साथ मॉड्यूल होगा।
उल्लेख typings-for-css-loader
a bug और क्योंकि प्रकार पीढ़ी देरी दायर की है, यह मामला हमारे *.css.d.ts
फ़ाइल अभी तक उत्पन्न नहीं कर रहा है में वैश्विक *.css
प्रकार की घोषणा करने के लिए सबसे अच्छा है।
कि little bug परिदृश्य:
- सीएसएस फ़ाइल बनाएँ
component.css
- घटक में यह शामिल
import * as css from './component.css'
- भागो
webpack
- टाइपप्रति संकलक कोड संकलन करने की कोशिश करेंगे (त्रुटि)
- लोडर उत्पन्न होगा सीएसएस मॉड्यूल टाइपिंग फ़ाइल (
component.css.d.ts
), लेकिन यह नया टाइप खोजने के लिए टाइपस्क्रिप्ट कंपाइलर के लिए देर हो चुकी है ypings फ़ाइल
- रन
webpack
फिर से बिल्ड त्रुटि को ठीक करेगा।
आसान फिक्स सीएसएस मॉड्यूल आयात करने के लिए वैश्विक परिभाषा (। उदाहरण के लिए फ़ाइल अपने स्रोत जड़ में typings.d.ts
कहा जाता है) बनाने के लिए है:
declare module '*.css' {
interface IClassNames {
[className: string]: string
}
const classNames: IClassNames;
export = classNames;
}
अगर कोई सीएसएस उत्पन्न फ़ाइल है इस परिभाषा का उपयोग किया जाएगा (जैसे आपने नई सीएसएस फ़ाइल जोड़ दी है)। अन्यथा जेनरेट विशिष्ट (उसी फ़ोल्डर में होना चाहिए और स्रोत फ़ाइल + .d.ts
एक्सटेंशन के रूप में नामित होना आवश्यक है), उदाहरण के लिए। component.css.d.ts
परिभाषा और IntelliSense पूरी तरह से काम करेगा।
component.css.d.ts
का उदाहरण:
export const wrapper: string;
export const button: string;
export const link: string;
और तुम उत्पन्न सीएसएस typings आप आईडीई में सेटअप फिल्टर अपने स्रोतों में विस्तार .css.d.ts साथ सभी फाइलों को छिपाने के लिए कर सकते हैं देखने के लिए नहीं करना चाहते हैं।
या तो 'आयात * शैलियों के रूप में ...' या 'आयात शैलियों = आवश्यकताएं (...' मान्य हैं। आपको अपनी सीएसएस फ़ाइल के लिए एक मॉड्यूल घोषित करना होगा - या तो स्पष्ट या सामान्य सभी सीएसएस फाइलें - क्योंकि टाइपस्क्रिप्ट कंपाइलर को इसके बारे में कोई जानकारी नहीं होगी। [यहां देखें] (https://github.com/css-modules/css-modules/issues/61) स्वचालित परिभाषा जनरेटर के लिए। –
संभावित डुप्लिकेट [वेबपैक द्वारा निर्मित टाइपस्क्रिप्ट के साथ प्रतिक्रिया घटकों में सीएसएस मॉड्यूल का उपयोग करें] (http://stackoverflow.com/questions/35014132/use-css-modules-in-react-components-with-typescript-built-by-webpack) – mixel