W moim projekcie angular2 staram się przedłużyć prototyp klasy string za pomocą maszynopisu. To jest mój kod:Metody rozszerzeń w maszynopisie (system)
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;
}
Z tym kodem to kompiluje projektów (również zawartość pomocy Visual Studio Code pomaga mi), ale w czasie wykonywania otrzymuję „zawiera nie jest zdefiniowana”.
Co robię źle?
Thanks a lot
PS: to jest mój 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
zauważyłem, że importując js plik index.html w działa ale nie podoba mi się to podejście.
<script src="app/source/utils/extensions.js"></script>
Czy importujesz swoje rozszerzenia? Jeśli używasz modułu ładującego moduły, musisz sprawdzić, czy napisany kod jest załadowany. –
Dzięki Luka. Co masz na myśli z importem? Nie eksportuję klasy. Zaktualizowałem pytanie, podając więcej szczegółów. – user3471528
W systemie System.js musisz podać kompilatorowi, gdzie można znaleźć kod. Podąża za wszystkimi importami i rozwiązuje je, ładując zawartość. W ten sposób możesz uniknąć umieszczania wszystkich plików js w tobie html. –