ฉันยอมรับว่าในกรณีส่วนใหญ่if (!(x instanceof Y)) {...}
วิธีการที่ดีที่สุดคือ แต่ในบางกรณีการสร้างisY(x)
ฟังก์ชั่นเพื่อให้คุณสามารถif (!isY(x)) {...}
คุ้มค่า
ฉันเป็นนักพิมพ์ดีดคนหนึ่งและฉันเคยถามคำถาม S / O นี้มาหลายครั้งในช่วงสองสามสัปดาห์ที่ผ่านมาดังนั้นสำหรับผู้ใช้ Google ในการพิมพ์ตัวพิมพ์ดีดแบบนี้เพื่อสร้างตัวพิมพ์ดีดเช่นนี้:
typeGuards.ts
export function isHTMLInputElement (value: any): value is HTMLInputElement {
return value instanceof HTMLInputElement
}
การใช้
if (!isHTMLInputElement(x)) throw new RangeError()
// do something with an HTMLInputElement
ฉันเดาเหตุผลเดียวว่าทำไมสิ่งนี้ถึงเหมาะสมใน typescript และไม่ใช่ js ปกติก็คือ typeguards เป็นแบบแผนทั่วไปดังนั้นถ้าคุณเขียนมันสำหรับอินเตอร์เฟสอื่นมันสมเหตุสมผล / เข้าใจได้ / เป็นธรรมชาติที่จะเขียนมันสำหรับคลาสด้วย
มีรายละเอียดเพิ่มเติมเกี่ยวกับการ์ดชนิดที่ผู้ใช้กำหนดเช่นนี้ในเอกสาร
instanceof
มาก ...