Wiem, że pytanie jest już zamknięte, ale znalazłem, że szuka tego samego wyjątku TypeScriptException, być może ktoś inny uderzył w to pytanie w poszukiwaniu tego problemu.
Problem polega na brakującym wpisywaniu TypeScript:
var coordinates = outerElement[0].getBBox();
Rzuty The property 'getBBox' does not exist on value of type 'HTMLElement'.
Najprostszym sposobem jest jawne wpisanie zmiennej as any
var outerHtmlElement: any = outerElement[0];
var coordinates = outerHtmlElement.getBBox();
Edycja, koniec 2016 r
Ponieważ preferowanym operatorem rzutowania TypeScript 1.6 jest to, że as
te linie można przekształcić w elegancki:
let coordinates = (outerElement[0] as any).getBBox();
Inne rozwiązania
Oczywiście, jeśli chcesz to zrobić dobrze, co czasami jest przesadą, możesz:
- Stwórz własny interfejs, który po prostu się rozszerza
HTMLElement
- Wprowadź własne pisanie, które się rozszerza
HTMLElement
HTMLElement
i ma dodatkowągetBBox
właściwość. W ten sposób nadal otrzymujesz uzupełnienie kodu dla innych właściwości.getBBox
jest jakaś metoda rzetelnego rzucania? lubisz znaleźć rodzajgetBBox
?getBBox
byłby wHTMLElement
tekście, możesz do niego rzucić obiektvar typedElement = <HTMLElement> outerHtmlElement;
.var coordinates = (<any>outerElement[0]).getBBox();
Szybkim i brudnym rozwiązaniem jest jawne przesłanie do
any
„Zaletą” jest to, że rzutowanie jest jawne, że kompiluje się nawet z
noImplicitAny
ustawioną flagą.Właściwym rozwiązaniem jest aktualizacja pliku definicji typów.
Pamiętaj, że kiedy rzutujesz zmienną na
any
, rezygnujesz z sprawdzania typu tej zmiennej.Ponieważ jestem w trybie wyłączenia odpowiedzialności, podwójne przesyłanie za pośrednictwem w
any
połączeniu z nowym interfejsem może być przydatne w sytuacjach, w których Tyjednak nadal potrzebujesz formy pisania.
Załóżmy, że chcesz załatać definicję wystąpienia
y
typuOrginalDef
nową właściwościąx
typunumber
:źródło
Możesz także użyć następującej sztuczki:
y.x = "some custom property"//gives typescript error
y["x"] = "some custom property"//no errors
Pamiętaj, że aby ponownie uzyskać dostęp do
x
błędu maszynopisu, nie musisz go taky["x"]
pisaćy.x
. Z tego punktu widzenia inne opcje są lepsze.źródło
:any
?Istnieje kilka sposobów rozwiązania tego problemu. Jeśli ten obiekt jest powiązany z jakąś biblioteką zewnętrzną, najlepszym rozwiązaniem byłoby znalezienie rzeczywistego pliku definicji ( tutaj świetne repozytorium ) dla tej biblioteki i odwołanie się do niego, np .:
Oczywiście nie dotyczy to w wielu przypadkach.
Jeśli chcesz „zastąpić” system typów, spróbuj wykonać następujące czynności:
Umożliwi to wykonywanie dowolnych połączeń
var y
.źródło
/// <reference path="/path/to/jquery.d.ts" />
z tagiem samozamykającym na końcujquery.d.ts
pliku w moim projekcienpm install -g tsd
zatemtsd install jquery
Kiedy TypeScript myśli, że właściwość „x” nie istnieje na „y” , wtedy zawsze możesz rzutować „y” na „any”, co pozwoli ci wywoływać dowolne (np. „X”) na „y”.
Teoria
Przykład ze świata rzeczywistego
Otrzymałem błąd „TS2339: Właściwość„ nazwa ”nie istnieje dla typu„ Funkcja ”dla tego kodu:
Naprawiłem to za pomocą:
źródło
Miałem problem w Angular2, korzystałem z lokalnego magazynu, aby coś zapisać i nie pozwoliło mi to.
Rozwiązania:
miałem
localStorage.city -> error -> Property 'city' does not exist on type 'Storage'.
Jak to naprawić:
źródło
<any>
-(<any>localStorage).city
.Szybka poprawka, w której nic innego nie działa:
Nie jest to dobra praktyka, ale zapewnia rozwiązanie bez konieczności wyłączania dosłowności
źródło
Wiem, że teraz jest 2020, ale nie widziałem odpowiedzi, która zaspokoi część „ignorowania” pytania. Okazuje się, że możesz powiedzieć TSLint, aby zrobił to tylko za pomocą dyrektywy;
Zwykle spowodowałoby to błąd stwierdzający, że „someProp nie istnieje na typie”. Z komentarzem ten błąd znika.
Zapobiegnie to zgłaszaniu błędów podczas kompilacji i powinno również powstrzymać Twoje IDE od narzekań.
źródło
W moim konkretnym projekcie nie mogłem go uruchomić i wykorzystałem
declare var $;
. Nie jest to czyste / zalecane rozwiązanie, nie rozpoznaje zmiennych JQuery, ale po użyciu tego nie miałem błędów (i musiałem, aby automatyczne kompilacje zakończyły się powodzeniem).źródło
Udało mi się to obejść na maszynie za pomocą czegoś takiego:
Wydawało się, że to jedyny sposób, w jaki mogłem użyć wartości w X jako kluczy do mapy Y i kompilacji.
źródło