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

การแปลงประเภท - Typescript ไม่บังคับประเภทกับพารามิเตอร์ในฟังก์ชัน


ฉันมีฟังก์ชันที่ง่ายมากนี้ ซึ่งรับจำนวนเต็ม 3 จำนวน มาบวกกันแล้วพิมพ์ผลรวมออกไปยังคอนโซล

function add(n1, n2, n3) {
    var sum : number = n1 + n2 + n3;

    console.log(sum);
}

สมมติฐานของฉันคือ sum เป็นจำนวนเต็ม ดังนั้นมันจึงบังคับให้ชนิดตรงกัน ดังนั้นฉันจึงลองแบบนี้

add(1,2,"Henok");

TypeScript ไม่ส่งเสียงเตือน มันเพียงแค่พิมพ์ 3Henok ออกมา ทำไม?


ตอบในคอมเมนต์ด้านล่างโดย toskv เขาได้กล่าวถึงสองสิ่ง

จริง ๆ แล้วสิ่งที่คุณกำลังเขียนอยู่นั่นคือ var sum:number=(1 as any) + (2 as any) + ('hehe3' as any) เพราะประเภทของพารามิเตอร์ไม่ได้ระบุ และจะค่าเริ่มต้นเป็น any

และเพื่อบังคับให้เกิดการเตือนในช่วงเวลาคอมไพล์ เขาได้เพิ่มคำแนะนำนี้

คุณสามารถเปิดใช้งานตัวเลือก noImplicitAny เมื่อคอมไพล์ และ tsc จะแจ้งว่าคุณยังไม่ได้ระบุประเภทของโค้ดของคุณอย่างถูกต้อง

นั่นใช้ได้สำหรับฉัน ขอบคุณ toskv

คำตอบ #1

พารามิเตอร์ควรกำหนดประเภทใน TypeScript ด้วยเพื่อที่จะเห็นข้อผิดพลาดในการคอมไพล์

function add(n1:number, n2:number, n3:number) {
    var sum : number = n1 + n2 + n3;

    console.log(sum);
}

add(1,2, "Henok"); // compilation error

ขอบคุณ tosky

โดยค่าเริ่มต้น พารามิเตอร์/ตัวแปรที่ไม่ได้ถูกระบุชนิดใด ๆ จะถือว่าเป็น "any" any หมายถึงอะไรก็ได้ (ชนิดใดก็ได้) และจะไม่มีการตรวจสอบชนิดใด ๆ กับ any

อย่าสับสนระหว่าง any กับ object ถ้าคุณกำลังใช้สิ่งที่เหมือนกับ C# แล้ว any จะคล้ายกับ dynamic ซึ่งประเภทจะถูกกำหนดในขณะรันไทม์

ดังนั้น, การแสดงออก

var sum:number = n1 + n2 + n3

จริงๆ แล้ว

var sum:number = (n1 as any) + (n2 as any) + (n3 as any)

คำตอบ #2

หากคุณกำลังรันการตรวจสอบ type ของ TypeScript บนไฟล์ JavaScript อย่าลืมเพิ่ม checkJs: true ใน tsconfig.json หรือเพิ่ม // @ts-check ที่ด้านบนสุด (เช่น ก่อน import) ของไฟล์ของคุณ