Saya tahu pertanyaannya sudah ditutup tetapi saya sudah menemukannya mencari TypeScriptException yang sama, mungkin orang lain memukul pertanyaan ini mencari masalah ini.
Masalahnya terletak pada pengetikan TypeScript yang hilang:
var coordinates = outerElement[0].getBBox();
Melempar The property 'getBBox' does not exist on value of type 'HTMLElement'.
Cara termudah adalah dengan mengetikkan variabel secara eksplisit sebagai any
var outerHtmlElement: any = outerElement[0];
var coordinates = outerHtmlElement.getBBox();
Edit, akhir 2016
Karena TypeScript 1.6 lebih disukai operator casting, as
baris-baris itu dapat disatukan menjadi elegan:
let coordinates = (outerElement[0] as any).getBBox();
Solusi lain
Tentu saja jika Anda ingin melakukannya dengan benar, yang kadang-kadang berlebihan, Anda dapat:
- Buat antarmuka sendiri yang cukup diperluas
HTMLElement
- Perkenalkan pengetikan sendiri yang meluas
HTMLElement
HTMLElement
dan memilikigetBBox
properti tambahan . Dengan begitu Anda masih mendapatkan penyelesaian kode pada properti lainnya.getBBox
adakah metode yang bisa digunakan dengan benar? ingin mengetahui jenisgetBBox
?getBBox
dalamHTMLElement
tipe Anda bisa melemparkan objek ke sana olehvar typedElement = <HTMLElement> outerHtmlElement;
.var coordinates = (<any>outerElement[0]).getBBox();
Solusi cepat dan kotor adalah dengan secara eksplisit dilemparkan ke
any
"Keuntungan" adalah bahwa, pemerannya eksplisit, ini akan dikompilasi bahkan dengan
noImplicitAny
set bendera.Solusi yang tepat adalah memperbarui file definisi pengetikan.
Harap dicatat bahwa, ketika Anda melemparkan variabel ke
any
, Anda memilih keluar dari jenis memeriksa variabel itu.Karena saya dalam mode disclaimer, casting ganda melalui
any
dikombinasikan dengan antarmuka baru, dapat berguna dalam situasi di mana Andanamun, Anda masih menginginkan beberapa bentuk pengetikan.
Katakanlah Anda ingin menambal definisi instance
y
dari tipeOrginalDef
dengan propertix
tipe barunumber
:sumber
Anda juga dapat menggunakan trik berikut:
y.x = "some custom property"//gives typescript error
y["x"] = "some custom property"//no errors
Perhatikan, bahwa untuk mengakses
x
dan tidak mendapatkan kesalahan naskah lagi Anda harus menulis seperti ituy["x"]
, bukany.x
. Jadi dari perspektif ini pilihan lain lebih baik.sumber
:any
?Ada beberapa cara untuk mengatasi masalah ini. Jika objek ini terkait dengan beberapa pustaka eksternal, solusi terbaik adalah menemukan file definisi aktual (repositori hebat di sini ) untuk pustaka itu dan merujuknya, misalnya:
Tentu saja, ini tidak berlaku dalam banyak kasus.
Jika Anda ingin 'mengganti' sistem jenis, coba yang berikut ini:
Ini akan memungkinkan Anda melakukan panggilan apa pun yang Anda inginkan
var y
.sumber
/// <reference path="/path/to/jquery.d.ts" />
dengan tag penutup diri di akhirjquery.d.ts
file di proyek sayanpm install -g tsd
thentsd install jquery
Ketika TypeScript berpikir bahwa properti "x" tidak ada pada "y" , maka Anda selalu dapat memasukkan "y" ke "any", yang akan memungkinkan Anda untuk memanggil apa pun (seperti "x") pada "y".
Teori
Contoh Dunia Nyata
Saya mendapatkan kesalahan "TS2339: Properti 'nama' tidak ada pada tipe 'Fungsi'" untuk kode ini:
Jadi saya memperbaikinya dengan:
sumber
Punya masalah di Angular2, saya menggunakan penyimpanan lokal untuk menyimpan sesuatu dan itu tidak akan membiarkan saya.
Solusi:
Saya punya
localStorage.city -> error -> Property 'city' does not exist on type 'Storage'.
Bagaimana memperbaikinya:
sumber
<any>
-(<any>localStorage).city
.Perbaikan cepat tempat tidak ada lagi yang berfungsi:
Bukan praktik yang baik tetapi memberikan solusi tanpa harus mematikan no-string-literal
sumber
Saya tahu sekarang tahun 2020, tetapi saya tidak bisa melihat jawaban yang memuaskan bagian "abaikan" dari pertanyaan itu. Ternyata, Anda dapat memberitahu TSLint untuk melakukan hal itu menggunakan arahan;
Biasanya ini akan menimbulkan kesalahan, menyatakan bahwa 'someProp tidak ada pada tipe'. Dengan komentar, kesalahan itu hilang.
Ini akan menghentikan kesalahan yang terjadi saat kompilasi dan juga harus menghentikan IDE Anda yang mengeluh kepada Anda.
sumber
Dalam proyek khusus saya, saya tidak bisa membuatnya bekerja, dan digunakan
declare var $;
. Bukan solusi bersih / direkomendasikan, itu tidak mengenali variabel JQuery, tapi saya tidak punya kesalahan setelah menggunakan itu (dan harus untuk membangun otomatis saya untuk berhasil).sumber
Saya bisa melewati ini dalam naskah menggunakan sesuatu seperti:
Ini sepertinya satu-satunya cara saya bisa menggunakan nilai-nilai di dalam X sebagai kunci untuk peta Y dan kompilasi.
sumber