Neler oluyor
Sorun, instanceof
JavaScript'ten bir yapı olması ve JavaScript'te sağ taraftaki işlenen için instanceof
bir değer beklemesidir . Özellikle x instanceof Foo
JavaScript Foo.prototype
, prototip zincirinde herhangi bir yerde bulunup bulunmadığını görmek için bir çalışma zamanı kontrolü gerçekleştirecektir x
.
Bununla birlikte, TypeScript'te interface
s yayma içermez. Bu , çalışma zamanında ne olmadığı Foo
ve Foo.prototype
var olmadığı anlamına gelir , bu nedenle bu kod kesinlikle başarısız olacaktır.
TypeScript size bunun asla işe yaramayacağını söylemeye çalışıyor . Foo
sadece bir tür, hiç de bir değer değil!
"Bunun yerine ne yapabilirim instanceof
?"
Tip korumalarına ve kullanıcı tanımlı tip korumalarına bakabilirsiniz .
"Ama ben sadece bir anahtarlamalı ne olur interface
a class
?"
Bir geçiş için cazip olabilir interface
a class
, ancak typescript yapısal tip sisteminde ki (işler öncelikle nerede farkına varmalıdır tabanlı biçimden ), belirli bir sınıfla aynı şekle sahip herhangi bir nesneyi üretebilir:
class C {
a: number = 10;
b: boolean = true;
c: string = "hello";
}
let x = new C()
let y = {
a: 10, b: true, c: "hello",
}
x = y;
y = x;
Bu durumda, sahip x
ve y
aynı tür olduğunu, ancak kullanmayı deneyin eğer instanceof
ikisinden biri üzerinde, diğer ilgili ters bir sonuç elde edersiniz. Yani instanceof
olmaz gerçekten sen daktilo yapısal tiplerinin yararlanarak eğer türü hakkında kadarını söyleyebilirim.
Foo | string
.