javascript - ตรวจสอบว่าตัวแปรถูกกำหนดใน Typescript หรือไม่?
ฉันกำลังพยายามตรวจสอบว่าตัวแปรเป็น undefined โดยใช้ TypeScript แต่ยังไม่ได้ผลเลย
ฉันกำลังพยายามอยู่ตอนนี้
if (typeof variablename !== 'undefined') { /*do something here*/ }
แต่ด้วยเหตุผลบางอย่าง คอมไพเลอร์มักจะแสดงข้อผิดพลาดให้ฉัน
Cannot find name 'variablename'
ฉันสามารถเปิดคอนโซลเบราว์เซอร์และวางโค้ดข้างต้นได้และมันทำงานตามที่คาดไว้ ไฟล์ที่มีการตรวจสอบ undefined นั้นอยู่ในไฟล์ที่ไม่ได้ถูกนำเข้าโดยไฟล์ JS/TS อื่นใด
คำตอบ #1
คอมไพเลอร์ TypeScript จะไม่อนุญาตให้คุณเข้าถึงตัวแปรที่มันไม่รู้จัก เพราะส่วนใหญ่การเข้าถึงเช่นนั้นมักเป็นข้อผิดพลาด
หากคุณต้องการให้คอมไพเลอร์เชื่อว่าตัวแปรดังกล่าวอยู่ในขอบเขต คุณสามารถ ประกาศ มันก่อน:
declare var variablename: string | undefined;
if (typeof variablename !== 'undefined') { /*do something here*/ }
นั่นไม่ทำให้ JavaScript ที่ถูกสร้างออกมามีการเปลี่ยนแปลงใด ๆ เลย มันเพียงแค่บอกให้คอมไพเลอร์ทำเหมือนว่ามี var ชื่อ variablename อยู่ในสโคปซึ่งมีประเภทเป็น string | undefined (ในกรณีการใช้งานของคุณอาจจะเป็นประเภทอื่นที่ไม่ใช่ string แต่ผมต้องการตัวอย่าง) กล่าวอีกนัยหนึ่ง คือ มันสมมติว่า JavaScript ของคุณจะทำงานในบริบทที่มี variablename ประเภทนั้นอยู่
นี่ไม่ใช่สิ่งที่คุณต้องการ อย่างแท้จริง เพราะมันเป็นไปได้ในขณะรันไทม์ว่าอาจไม่มีตัวแปรนั้น โชคร้ายที่ไม่มีวิธีบอกคอมไพเลอร์ว่าตัวแปร อาจจะอยู่ ในสโคปและสามารถใช้ typeof เพื่อตรวจสอบมันได้ ตัวแปรจะอยู่ในสโคป (และคุณสามารถเข้าถึงมันได้) หรือไม่อยู่ (และคุณเข้าถึงมันไม่ได้) มีข้อเสนอใน microsoft/TypeScript#23602 ให้มีวิธีการประกาศตัวแปรแบบมีเงื่อนไข แต่ก็ไม่ได้เกิดผลอะไร การประกาศตัวแปรว่าแน่นอนว่ามีอยู่แต่เป็นประเภทที่มี | undefined อยู่ด้วยน่าจะใกล้เคียงที่สุดแล้ว เท่าที่ฉันคิด
ลิงก์ Playground ไปยังโค้ด
