Typescript nagle nie może znaleźć moich typów

0

Hej, robię sobie w .NetCore 3 MVC.
Tworzę aplikację webową z pomocą TypeScript zamiast JavaScript. I wszystko działało, a nagle przestało.

Nagle moje skrypty przestały rozpoznawać moje typy.
Np. mam w pliku app.ts coś takiego:

declare type EventHandler = () => void;

W innym pliku, ajaxManager.ts używam tego typu:

class AjaxManager
{
//zawartość usunięta dla czytelności

    postForm(formId: string, responseId: string = "", onSuccess: EventHandler = null, onError: EventHandler = null)
    {
        //kod
    }
}

I nie wie, czym jest EventHandler.
Wszystko grało, dopóki nie zacząłem używać biblioteki AutoNumeric. Nie chciało mi jej zaimportować: import AutoNumeric from 'autonumeric', ale gdzieś wyczytałem, że muszę dodać opcję w tsconfig.json: "esModuleInterop": true w compilerOptions. I zadziałało. Natomiast przestało widzieć moje typy. Teraz nawet po usunięciu "esModuleInterop" nie widzi moich typów. Co robię nie tak?

W pliku app.ts mam luźne funkcje i luźne deklaracje.

0

OK, rozkminiłem. Jeśli plik ma instrukcję import, TypeScript uznaje taki plik za moduł. Co wg mnie jest dość głupie. W innym przypadku plik jest częścią globalnego scope'u.

To teraz mam taką sytuację. Mam dwa pliki, app.ts, w którym mam różne deklaracje i zdarzenie $(document).ready. Mam też drugi plik: AutoNumericHelper, który importuje AutoNumeric i w związku z tym jest już widoczny jako moduł. Wobec tego TS nie pozwoli mi na coś takiego w app.ts:

$(document).ready(function () {
    $(".currency-input").each(function () {
        AutoNumericHelper.registerCurrencyInput(<HTMLInputElement>this);
    })
});

Wymyśliłem sobie, że app.ts będzie miało wszystkie rzeczy związane z document.ready. W tym momencie muszę document.ready rozbić na dwa pliki. To, co było do tej pory w app.ts i wywołanie registerCurrencyInput w pliku AutoNumericHelper.ts. I teraz pytanie, czy mogę w jakiś sposób to ogarnąć tak, żeby móc używać rzeczy zdefiniowanych w AutoNumericHelpers bez tworzenia modułów? Czy może po prostu dobrą praktyką jest utworzenie modułu? Rzeczy, które piszę nie będą nadawały się do powtórnego użycia, więc nie widzę sensu tworzenia modułu ze swojego kodu ts.

1 użytkowników online, w tym zalogowanych: 0, gości: 1