Nel mio progetto angular2 sto provando ad estendere il prototipo della classe stringa utilizzando il dattiloscritto. Questo è il mio codice:Metodi di estensione in dattiloscritto (sistema)
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;
}
Con questo codice le compilazioni di progetto (anche il contenuto assist di codice Visual Studio mi aiuta), ma a run-time ho un 'contiene non è definito'.
Cosa sto facendo male?
Grazie mille
PS: questo è il mio 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"
]
}
EDIT
ho notato che l'importazione del file dijs in index.html funziona, ma non mi piace questo approccio.
<script src="app/source/utils/extensions.js"></script>
Hai importato le estensioni? Se stai usando un caricatore di moduli dovrai controllare se il codice che hai scritto è effettivamente caricato. –
Grazie Luka. Cosa intendi con importazione? Non sto esportando la classe. Ho aggiornato la domanda con ulteriori dettagli – user3471528
Bene in System.js avrete bisogno di dire al compilatore dove trovare il vostro codice. Segue tutte le tue importazioni e le risolve, caricando i contenuti. In questo modo puoi evitare di inserire tutti i file js in te in html. –