การส่งตัวเลขไปยังสตริงใน TypeScript


175

วิธีใดที่ดีที่สุด (ถ้ามี) ที่จะส่งจากหมายเลขหนึ่งไปอีกสตริงใน typescript

var page_number:number = 3;
window.location.hash = page_number; 

ในกรณีนี้คอมไพเลอร์จะพ่นข้อผิดพลาด:

Type 'number' ไม่สามารถกำหนดให้พิมพ์ 'string'

เพราะlocation.hashเป็นสตริง

window.location.hash = ""+page_number; //casting using "" literal
window.location.hash = String(number); //casting creating using the String() function

แล้ววิธีไหนดีกว่ากัน?

คำตอบ:


294

"แคสติ้ง" นั้นแตกต่างจากการแปลง ในกรณีนี้window.location.hashจะแปลงตัวเลขเป็นสตริงโดยอัตโนมัติ แต่เพื่อหลีกเลี่ยงข้อผิดพลาดในการรวบรวม TypeScript คุณสามารถทำการแปลงสตริงได้ด้วยตัวเอง:

window.location.hash = ""+page_number; 
window.location.hash = String(page_number); 

การแปลงเหล่านี้เหมาะอย่างยิ่งถ้าคุณไม่ต้องการให้เกิดข้อผิดพลาดจะถูกโยนเมื่อpage_numberเป็นหรือnull undefinedในขณะที่page_number.toString()และpage_number.toLocaleString()จะโยนเมื่อpage_numberเป็นหรือnullundefined

เมื่อคุณต้องการแคสต์เท่านั้นไม่แปลงนี่คือวิธีแคสต์เป็นสตริงใน TypeScript:

window.location.hash = <string>page_number; 
// or 
window.location.hash = page_number as string;

<string>หรือas stringคำอธิบายประกอบโยนบอกคอมไพเลอร์ typescript ในการรักษาpage_numberเป็นสตริงที่รวบรวมเวลานั้น มันไม่ได้แปลงในเวลาทำงาน

อย่างไรก็ตามคอมไพเลอร์จะบ่นว่าคุณไม่สามารถกำหนดตัวเลขให้กับสตริงได้ คุณจะต้องโยนก่อน<any>แล้วจึงไปที่<string>:

window.location.hash = <string><any>page_number;
// or
window.location.hash = page_number as any as string;

ดังนั้นง่ายกว่าที่จะแปลงซึ่งจัดการประเภท ณ เวลารันไทม์และเวลาคอมไพล์:

window.location.hash = String(page_number); 

(ขอบคุณ @RuslanPolutsygan สำหรับการจับปัญหาการส่งหมายเลขสตริง)


1
ระวังถ้าpage_numberเป็นnullนี้จะตั้งค่าwindow.location.hashการ * "null"สตริง (ฉันต้องการข้อผิดพลาด: D)
Jeroen

หากคุณไม่ต้องการให้คอมไพเลอร์บ่นเพียงแค่พูดwindow.location.hash = <any>page_number;
Mouneer

1
โดยใช้การแปลง (ie. String(page_number)) มากกว่าหล่อเป็นสิ่งจำเป็นเมื่อคุณต้องการที่จะใช้วิธีการเช่นString toLowerCase()
EricRobertBrewer

31

เพียงแค่ใช้toStringหรือtoLocaleStringฉันจะบอกว่า ดังนั้น:

var page_number:number = 3;
window.location.hash = page_number.toLocaleString();

เหล่านี้โยนความผิดพลาดถ้าpage_numberเป็นหรือnull undefinedหากคุณไม่ต้องการให้คุณสามารถเลือกการแก้ไขที่เหมาะสมกับสถานการณ์ของคุณ:

// Fix 1:
window.location.hash = (page_number || 1).toLocaleString();

// Fix 2a:
window.location.hash = !page_number ? "1" page_number.toLocaleString();

// Fix 2b (allows page_number to be zero):
window.location.hash = (page_number !== 0 && !page_number) ? "1" page_number.toLocaleString();

อย่าใช้ toLocaleString สำหรับจำนวนมากเนื่องจากมันเป็นการเพิ่มจุลภาคเหมือนสกุลเงิน มันจะทำลายตัวระบุ
Obaid

7

ท่านสามารถใช้ไวยากรณ์ต่อไปนี้ใน typescript บันทึก backtick "` "

window.location.hash = `${page_number}`

5

window.location.hash คือ a stringให้ทำสิ่งนี้:

var page_number: number = 3;
window.location.hash = page_number.toString(); 

0

const page_number = 3;

window.location.hash = page_number เป็นสตริง // ข้อผิดพลาด

"การแปลงประเภท 'จำนวน' เป็น 'สตริง' อาจเป็นข้อผิดพลาดเพราะไม่มีประเภทใดที่ซ้อนทับอย่างเพียงพอกับสิ่งอื่นหากเจตนานี้ให้แปลงนิพจน์เป็น 'ไม่รู้จัก' ก่อน -> คุณจะได้รับข้อผิดพลาดนี้หากคุณพยายามพิมพ์หมายเลขลงในสตริง ดังนั้นก่อนอื่นให้แปลงเป็นค่าที่ไม่รู้จักแล้วแปลงเป็นสตริง

window.location.hash = (page_number ไม่ทราบ) เป็นสตริง // วิธีที่ถูกต้อง


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.