Cześć, od kilku dni zaczynam robić coś w TypeScripcie. Pomyślałem, że będzie prościej i szybciej niż w JS... Hmmm, no cóż. Było ok, dopóki nie zachciało mi się importować innych bibliotek (a konkretnie AutoNumeric).
Odkąd używam AutoNumeric, mam same problemy z własnym kodem. Wynika to prawdopodobnie z kompletnej nieznajomości TypeScript i ogólnie frontu.
Mimo, że przeczytałem już mnóstwo rzeczy, nadal mam problemy i tak naprawdę próbuję coś ogarnąć bez zrozumienia. Metodą prób i błędów nie wiedząc czemu tak, a nie inaczej. W związku z tym, dalej nic nie działa. Więc, czy ktoś może mi wyjaśnić, jak noobowi, jak to powinno być?
Próbuję zrobić coś prostego.
Mam np. plik app.ts, który wygląda tak:
import AutoNumeric from "autonumeric"
export declare type EventHandler = () => void;
export class App {
//jakieś tam statyczne metody
}
Jest to ładowane do HTMLa w taki sposób:
<script src="https://cdn.jsdelivr.net/npm/[email protected]"></script>
<script type="module" src="~/js/app.js"></script>
Następnie mam drugi plik ts, docview.ts, np:
import { App } from "../scripts/app"
function onNodeClick(args)
{
App.foo();
}
I teraz mam drugi plik html (który ładuje się przez ajax), gdzie mam coś w ten deseń:
<script type="module" src="~/js/docview.js"></script>
<treeview onclick="onNodeClick" />
TreeView tu widoczne to tak naprawdę jest razor'owy tagHelper i mniej więcej tak to wygląda po stronie Razor.
Próbuję to ogarnąć z różnymi ustawieniami tsconfig i ciągle mam różne problemy w runtime. A to, że nie wiadomo, co to jest export. A to, że onNodeClick nie jest zdefiniowane. A ostatnio, że failed to resolve module autonumeric specifier relative references must start with either / ./ or ../
Już mnie szlag jasny trafia. Czy ktoś mi może wyjaśnić, jak to powinno być ogarniane?
Co rozumiem:
- Jeśli plik ma dyrektywę import (lub export), to jest traktowany jako moduł i jego zawartość nie jest widoczna w globalnym scopie. W związku z tym mam porobione te exporty w swoich kodach.
- metodą prób i błędów doszedłem do tego, że jeśli w tsconfig.js w module podam "ES2015" to funkcja onNodeClick jest znajdywana... ale tylko jeśli zrobię
window.onNodeClick
- biblioteka autonumeric chyba wymusza
target = ES5
iesModuleInterop = true
.
Co i jak powinienem zrobić, żeby móc normalnie używać tego wszystkiego? Nie potrzebuję tworzyć żadnych modułów, bo kod, który robię jest raczej pod konkretny projekt. Przynajmniej na tym etapie. HELPUNKU!