Neler oluyor
Sorun, instanceofJavaScript'ten bir yapı olması ve JavaScript'te sağ taraftaki işlenen için instanceofbir değer beklemesidir . Özellikle x instanceof FooJavaScript 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 interfaces yayma içermez. Bu , çalışma zamanında ne olmadığı Foove Foo.prototypevar 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 . Foosadece 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 interfacea 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 xve yaynı tür olduğunu, ancak kullanmayı deneyin eğer instanceofikisinden biri üzerinde, diğer ilgili ters bir sonuç elde edersiniz. Yani instanceofolmaz gerçekten sen daktilo yapısal tiplerinin yararlanarak eğer türü hakkında kadarını söyleyebilirim.
Foo | string.