Truyền số cho chuỗi trong TypeScript


175

Đó là cách tốt nhất (nếu có) để truyền từ số sang chuỗi trong Bản in?

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

Trong trường hợp này, trình biên dịch sẽ ném lỗi:

Loại 'số' không thể gán cho loại 'chuỗi'

location.hashlà một chuỗi.

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

Vậy phương pháp nào tốt hơn?

Câu trả lời:


294

"Đúc" khác với chuyển đổi. Trong trường hợp này, window.location.hashsẽ tự động chuyển đổi một số thành một chuỗi. Nhưng để tránh lỗi biên dịch TypeScript, bạn có thể tự thực hiện chuyển đổi chuỗi:

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

Những chuyển đổi rất lý tưởng nếu bạn không muốn một lỗi được ném khi page_numbernullhay undefined. Trong khi đó page_number.toString()page_number.toLocaleString()sẽ ném khi page_numbernullhoặc undefined.

Khi bạn chỉ cần truyền, không chuyển đổi, đây là cách chuyển thành chuỗi trong TypeScript:

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

Các chú thích <string>hoặc as stringtruyền chú thích cho trình biên dịch TypeScript xử lý page_numbernhư một chuỗi tại thời gian biên dịch; nó không chuyển đổi trong thời gian chạy.

Tuy nhiên, trình biên dịch sẽ phàn nàn rằng bạn không thể gán một số cho một chuỗi. Trước tiên <any>, bạn phải chọn , sau đó <string>:

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

Vì vậy, dễ dàng hơn để chuyển đổi, xử lý loại trong thời gian chạy và biên dịch thời gian:

window.location.hash = String(page_number); 

(Cảm ơn @RuslanPolutsygan vì đã nắm bắt được vấn đề truyền số chuỗi.)


1
Cẩn thận, nếu page_numbernullnày sẽ thiết lập window.location.hashđể * chuỗi "null". (Tôi muốn có một lỗi: D).
Jeroen

Nếu bạn không muốn trình biên dịch phàn nàn, hãy nóiwindow.location.hash = <any>page_number;
Mouneer

1
Sử dụng chuyển đổi (ví dụ. String(page_number)) Thay vì truyền là cần thiết khi bạn muốn sử dụng bất kỳ Stringphương thức nào , như thế nào toLowerCase().
EricRobertBrewer

31

Chỉ cần sử dụng toStringhoặc toLocaleStringtôi muốn nói. Vì thế:

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

Những lỗi này ném một lỗi nếu page_numbernullhoặc undefined. Nếu bạn không muốn rằng bạn có thể chọn cách khắc phục phù hợp với tình huống của mình:

// 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();

Không sử dụng toLocaleString cho số lượng lớn vì nó thêm dấu phẩy giống như một loại tiền tệ. Nó sẽ phá hủy định danh.
Obaid

7

Người ta cũng có thể sử dụng cú pháp sau trong bản thảo. Lưu ý backtick "` "

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

5

window.location.hash là một string, vì vậy hãy làm điều này:

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

0

const page_number = 3;

window.location.hash = page_number dưới dạng chuỗi; // Lỗi

"Chuyển đổi loại 'số' sang loại 'chuỗi' có thể là một lỗi vì không loại nào trùng lặp đủ với loại khác. Nếu đây là cố ý, trước tiên hãy chuyển đổi biểu thức thành 'không xác định'." -> Bạn sẽ gặp lỗi này nếu bạn cố gắng đánh số thứ tự thành chuỗi. Vì vậy, đầu tiên chuyển đổi nó thành không xác định và sau đó thành chuỗi.

window.location.hash = (page_number là không xác định) dưới dạng chuỗi; // Đúng cách


-4

Sử dụng biểu tượng "+" để truyền chuỗi thành số.

window.location.hash = +page_number;

4
+chuyển sang số
đôi

1
Cần truyền một số vào một chuỗi
Nick Gallolas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.