ค้นหาเว็บไซต์

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 ไปยังโค้ด