TypeScript - Các biến
Một biến, theo định nghĩa, là "một không gian được đặt tên trong bộ nhớ" để lưu trữ các giá trị. Nói cách khác, nó hoạt động như một vùng chứa các giá trị trong một chương trình. Các biến TypeScript phải tuân theo các quy tắc đặt tên JavaScript -
Tên biến có thể chứa bảng chữ cái và chữ số.
Chúng không được chứa khoảng trắng và các ký tự đặc biệt, ngoại trừ dấu gạch dưới (_) và dấu đô la ($).
Tên biến không được bắt đầu bằng chữ số.
Một biến phải được khai báo trước khi nó được sử dụng. Sử dụngvar từ khóa để khai báo biến.
Khai báo biến trong TypeScript
Cú pháp kiểu để khai báo một biến trong TypeScript là bao gồm dấu hai chấm (:) sau tên biến, theo sau là kiểu của nó. Cũng như trong JavaScript, chúng tôi sử dụngvar từ khóa để khai báo một biến.
Khi bạn khai báo một biến, bạn có bốn tùy chọn:
Khai báo kiểu và giá trị của nó trong một câu lệnh.
Khai báo kiểu của nó nhưng không có giá trị. Trong trường hợp này, biến sẽ được đặt thành không xác định.
Khai báo giá trị của nó nhưng không có kiểu. Kiểu biến sẽ được đặt thành kiểu dữ liệu của giá trị được gán.
Không khai báo giá trị không phải loại. Trong trường hợp này, kiểu dữ liệu của biến sẽ là bất kỳ và sẽ được khởi tạo thành không xác định.
Bảng sau minh họa cú pháp hợp lệ cho khai báo biến như đã thảo luận ở trên:
Không. | Cú pháp và mô tả khai báo biến |
---|---|
1. | var name:string = ”mary” Biến lưu trữ một giá trị của kiểu chuỗi |
2. | var name:string; Biến là một biến chuỗi. Giá trị của biến được đặt thành không xác định theo mặc định |
3. | var name = ”mary” Kiểu của biến được suy ra từ kiểu dữ liệu của giá trị. Ở đây, biến có kiểu chuỗi |
4. | var name; Kiểu dữ liệu của biến là bất kỳ. Giá trị của nó được đặt thành không xác định theo mặc định. |
Ví dụ: Các biến trong TypeScript
var name:string = "John";
var score1:number = 50;
var score2:number = 42.50
var sum = score1 + score2
console.log("name"+name)
console.log("first score: "+score1)
console.log("second score: "+score2)
console.log("sum of the scores: "+sum)
Khi biên dịch, nó sẽ tạo mã JavaScript sau.
//Generated by typescript 1.8.10
var name = "John";
var score1 = 50;
var score2 = 42.50;
var sum = score1 + score2;
console.log("name" + name);
console.log("first score: " + score1);
console.log("second score : " + score2);
console.log("sum of the scores: " + sum);
Đầu ra của chương trình trên được đưa ra dưới đây:
name:John
first score:50
second score:42.50
sum of the scores:92.50
Trình biên dịch TypeScript sẽ tạo ra lỗi, nếu chúng ta cố gắng gán một giá trị cho một biến không cùng kiểu. Do đó, TypeScript tuân theo Kiểu gõ mạnh. Cú pháp gõ mạnh đảm bảo rằng các kiểu được chỉ định ở hai bên của toán tử gán (=) là giống nhau. Đây là lý do tại sao đoạn mã sau sẽ dẫn đến lỗi biên dịch:
var num:number = "hello" // will result in a compilation error
Nhập Assertion trong TypeScript
TypeScript cho phép thay đổi một biến từ kiểu này sang kiểu khác. TypeScript đề cập đến quá trình này là Type Assertion . Cú pháp là đặt kiểu đích giữa các ký hiệu <> và đặt nó trước biến hoặc biểu thức. Ví dụ sau giải thích khái niệm này:
Thí dụ
var str = '1'
var str2:number = <number> <any> str //str is now of type number
console.log(typeof(str2))
Nếu bạn di con trỏ chuột qua câu lệnh khẳng định kiểu trong Visual Studio Code, nó sẽ hiển thị sự thay đổi kiểu dữ liệu của biến. Về cơ bản, nó cho phép khẳng định từ kiểu S đến T thành công nếu S là kiểu con của T hoặc T là kiểu con của S.
Lý do tại sao nó không được gọi là "truyền kiểu" là vì ép kiểu thường ngụ ý một số loại hỗ trợ thời gian chạy trong khi "xác nhận kiểu" hoàn toàn là một cấu trúc thời gian biên dịch và một cách để bạn cung cấp gợi ý cho trình biên dịch về cách bạn muốn mã của mình được phân tích.
Khi biên dịch, nó sẽ tạo mã JavaScript sau.
"use strict";
var str = '1';
var str2 = str; //str is now of type number
console.log(typeof (str2));
Nó sẽ tạo ra kết quả sau:
string
Nhập suy ra trong TypeScript
Thực tế là, Typecript được nhập mạnh, tính năng này là tùy chọn. TypeScript cũng khuyến khích nhập động các biến. Điều này có nghĩa là, TypeScript khuyến khích khai báo một biến không có kiểu. Trong những trường hợp như vậy, trình biên dịch sẽ xác định kiểu của biến trên cơ sở giá trị được gán cho nó. TypeScript sẽ tìm cách sử dụng đầu tiên của biến trong mã, xác định kiểu mà nó đã được đặt ban đầu và sau đó giả sử cùng một kiểu cho biến này trong phần còn lại của khối mã của bạn.
Điều tương tự được giải thích trong đoạn mã sau:
Ví dụ: Nhập theo suy luận
var num = 2; // data type inferred as number
console.log("value of num "+num);
num = "12";
console.log(num);
Trong đoạn mã trên -
Đoạn mã khai báo một biến và đặt giá trị của nó là 2. Lưu ý rằng khai báo biến không chỉ định kiểu dữ liệu. Do đó, chương trình sử dụng kiểu nhập suy luận để xác định kiểu dữ liệu của biến, tức là nó chỉ định kiểu của giá trị đầu tiên mà biến được đặt thành. Trong trường hợp này,num được đặt thành số loại.
Khi mã cố gắng đặt giá trị của biến thành chuỗi. Trình biên dịch đưa ra lỗi vì kiểu của biến đã được đặt thành số.
Nó sẽ tạo ra kết quả sau:
error TS2011: Cannot convert 'string' to 'number'.
Phạm vi biến TypeScript
Phạm vi của một biến chỉ định nơi mà biến được xác định. Tính khả dụng của một biến trong chương trình được xác định bởi phạm vi của nó. Các biến TypeScript có thể thuộc các phạm vi sau:
Global Scope- Các biến toàn cục được khai báo bên ngoài các cấu trúc lập trình. Các biến này có thể được truy cập từ bất kỳ đâu trong mã của bạn.
Class Scope - Các biến này còn được gọi là fields. Các trường hoặc biến lớp được khai báo bên trong lớp nhưng bên ngoài các phương thức. Các biến này có thể được truy cập bằng cách sử dụng đối tượng của lớp. Các trường cũng có thể là tĩnh. Các trường tĩnh có thể được truy cập bằng cách sử dụng tên lớp.
Local Scope - Các biến cục bộ, như tên cho thấy, được khai báo trong các cấu trúc như phương thức, vòng lặp, v.v. Các biến cục bộ chỉ có thể truy cập trong cấu trúc nơi chúng được khai báo.
Ví dụ sau minh họa các phạm vi biến trong TypeScript.
Ví dụ: Phạm vi biến
var global_num = 12 //global variable
class Numbers {
num_val = 13; //class variable
static sval = 10; //static field
storeNum():void {
var local_num = 14; //local variable
}
}
console.log("Global num: "+global_num)
console.log(Numbers.sval) //static variable
var obj = new Numbers();
console.log("Global num: "+obj.num_val)
Khi chuyển đổi, mã JavaScript sau được tạo:
var global_num = 12; //global variable
var Numbers = (function () {
function Numbers() {
this.num_val = 13; //class variable
}
Numbers.prototype.storeNum = function () {
var local_num = 14; //local variable
};
Numbers.sval = 10; //static field
return Numbers;
}());
console.log("Global num: " + global_num);
console.log(Numbers.sval); //static variable
var obj = new Numbers();
console.log("Global num: " + obj.num_val);
Nó sẽ tạo ra kết quả sau:
Global num: 12
10
Global num: 13
Nếu bạn cố gắng truy cập biến cục bộ bên ngoài phương thức, nó sẽ dẫn đến lỗi biên dịch.
error TS2095: Could not find symbol 'local_num'.