2016-04-05 9 views
12

में विस्तार विधियां मेरे कोणीय 2 प्रोजेक्ट में मैं टाइपस्क्रिप्ट का उपयोग कर स्ट्रिंग कक्षा के प्रोटोटाइप को बढ़ाने का प्रयास कर रहा हूं। मैं एक 'में शामिल है परिभाषित नहीं है' प्राप्तटाइपस्क्रिप्ट (सिस्टम)

interface String 
{ 
    startsWith(s:string); 
    contains(s:string); 
    containsOr(s1:string, s2:string); 
} 

String.prototype.startsWith = function (s:string):boolean { 
    return this.indexOf (s) === 0; 
} 
String.prototype.contains = function (s:string):boolean { 
    return this.indexOf(s) > 1; 
} 
String.prototype.containsOr = function (s1:string, s2:string):boolean { 
    return this.indexOf(s1) > 1 || this.indexOf (s2) > 1; 
} 
इस कोड को परियोजना compiles साथ

(भी सामग्री दृश्य स्टूडियो संहिता की सहायता मुझे मदद करता है), लेकिन रन-टाइम में: यह मेरा कोड है।

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

धन्यवाद एक बहुत

पुनश्च: यह मेरा tsconfig है:

{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "system", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": false, 
    "outDir": "wwwroot/app/source/" 
    }, 
    "exclude": [ 
    "node_modules", 
    "bower_components", 
    "wwwroot", 
    "typings/main", 
    "typings/main.d.ts" 
    ] 
} 

संपादित

मैंने देखा है कि js फ़ाइल आयात में index.html यह काम करता है, लेकिन मुझे यह दृष्टिकोण पसंद नहीं है। html में कोड आयात करने की

<script src="app/source/utils/extensions.js"></script> 
+0

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

+0

धन्यवाद लुका। आयात के साथ आपका क्या मतलब है? मैं कक्षा का निर्यात नहीं कर रहा हूं। मैंने अधिक जानकारी के साथ प्रश्न अपडेट किया – user3471528

+0

ठीक है System.js में आपको संकलक कहने की आवश्यकता होगी कि आपका कोड कहां खोजें। यह आपके सभी आयातों का पालन करता है और सामग्री को लोड करता है, उन्हें हल करता है। इस तरह आप सभी जेएस फाइलों को एचटीएमएल में डालने से बच सकते हैं। –

उत्तर

1

इसके बजाय सिर्फ अपने कोड के शीर्ष पर डाल:

import './utils/extensions'; 

बस फाइल करने के लिए अपना रास्ता साथ बदलें।

TypeScript docs

MDN docs

+0

इस तरह से मुझे निम्न त्रुटि मिलती है: * http: // localhost: 2068/app/source/utils/extension.js को रजिस्टर के रूप में पता चला लेकिन निष्पादित नहीं किया गया। (...) * – user3471528

+0

क्या आप 'स्ट्रिंग' को निर्यात करने का प्रयास कर सकते हैं आपके 'extension.ts'? :) –

+0

* इंटरफ़ेस * से पहले * निर्यात * कार्य जोड़ना * मुझे एक संकलन त्रुटि * त्रुटि टीएस 233 9 मिलती है: संपत्ति 'युक्त' प्रकार 'स्ट्रिंग' पर मौजूद नहीं है। ऐप/स्रोत/यूटिल/एक्सटेंशन.ट्स (15,18): त्रुटि टीएस 233 9: संपत्ति 'includeOr' प्रकार 'स्ट्रिंग' पर मौजूद नहीं है। * अजीब बात यह है कि त्रुटि() और includeOr से संबंधित है , और शुरू करने के साथ नहीं()>। < – user3471528

15

मैं इसे कोई टीएस त्रुटियों (1.8.9), Angular2 के साथ काम कर प्राप्त करने में सक्षम था (2.0.0:

यहाँ मॉड्यूल और आयात पर कुछ और संसाधन हैं -beta.12) त्रुटियों, और निम्न टेम्पलेट का उपयोग कर समारोह कॉल काम कर रहे:

tsconfig.json

{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "system", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": false 
}, 
"exclude": [ 
    "node_modules", 
    "typings/main", 
    "typings/main.d.ts" 
    ] 
} 

इसके बाद, (यदि कोई मौजूद नहीं है) एक global.d.ts अपनी परियोजना के लिए स्थानीय फ़ाइल बनाने:

global.d.ts (परियोजना के लिए स्थानीय, एक ही नाम के नहीं मुख्य टीएस फ़ाइल)

export {} 

    declare global { 
    interface String { 
     calcWidth(): number; 
    } 
    } 

extensions.ts (पूरी फ़ाइल)

export {} 

//don't redefine if it's already there 
if (!String.prototype.hasOwnProperty('calcWidth')) { 
    String.prototype.calcWidth = function(): number { 
     //width calculations go here, but for brevity just return length 
     return this.length; 
    } 
} 
फिर अपने जो कुछ भी

आपका पहला सिस्टम। आयात (फ़ाइल नाम) है (मेरा मुख्य है।)।बस एक बार का उपयोग करें:

import './extensions' //or whatever path is appropriate 
... 
... 

अब, अपने पूरे एप्लिकेशन में आप अपने इंटरफेस का उपयोग कर सकते हैं:

8 

आशा इस उपयोगी है:

var testString = 'fun test'; 
console.log(testString.calcWidth()); 

कंसोल आउटपुट उत्पन्न करता है।