การแปลงประเภท - 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) ของไฟล์ของคุณ
