Toán tử typeof (typeof operator)
Toán tử typeof của JavaScript cho phép kiểm tra kiểu của giá trị.
jstypeof true; //=> "boolean"typeof 0; //=> "number"typeof "Hello World"; //=> "string"typeofundefined ; //=> "undefined"typeof null; //=> "object"typeofSymbol (); //=> "symbol"typeof 1n; //=> "bigint"typeof [1, 2, 3]; //=> "object"typeof {a : 1,b : 2 }; //=> "object"typeof (() => {}); //=> "function"
jstypeof true; //=> "boolean"typeof 0; //=> "number"typeof "Hello World"; //=> "string"typeofundefined ; //=> "undefined"typeof null; //=> "object"typeofSymbol (); //=> "symbol"typeof 1n; //=> "bigint"typeof [1, 2, 3]; //=> "object"typeof {a : 1,b : 2 }; //=> "object"typeof (() => {}); //=> "function"
Sử dụng typeof trong TypeScript để dùng kiểu đó trong if hoặc switch
Trong TypeScript, khi sử dụng toán tử typeof kết hợp với if hoặc switch, biến đó có thể được xử lý như kiểu tương ứng khi điều kiện khớp. Ví dụ sau cho thấy biến n có kiểu unknown được xác định là kiểu string bằng toán tử typeof.
tsconstn : unknown = "";if (typeofn === "string") {n .toU ;}
tsconstn : unknown = "";if (typeofn === "string") {n .toU ;}
Phân biệt null
Điều đáng chú ý với toán tử typeof là trường hợp giá trị là null. Kết quả của typeof null không phải "null" mà là "object". Đây là phần dễ gây hiểu nhầm nên cần chú ý. Đặc biệt khi muốn xác định giá trị có phải object không, nếu không ý thức rằng typeof null là "object" thì có thể gây ra bug không mong muốn.
js// Implementation có vấn đềfunctionisObject (value ) {return typeofvalue === "object"; // Không xem xét trường hợp value là null}isObject (null); // Giá trị trả về là true
js// Implementation có vấn đềfunctionisObject (value ) {return typeofvalue === "object"; // Không xem xét trường hợp value là null}isObject (null); // Giá trị trả về là true
Implementation có xem xét typeof null như sau.
jsfunctionisObject (value ) {returnvalue !== null && typeofvalue === "object";}
jsfunctionisObject (value ) {returnvalue !== null && typeofvalue === "object";}
Phần giải thích ở đây là toán tử typeof của JavaScript. Về toán tử typeof type của TypeScript, hãy xem phần giải thích toán tử typeof type.
📄️ typeof type operator
typeof trong TypeScript là type operator trích xuất kiểu từ một biến. Ví dụ dưới đây sử dụng type operator typeof với biến point để định nghĩa kiểu Point:
Phân biệt mảng
Như ví dụ trên, khi áp dụng typeof cho mảng sẽ trả về "object". Đây không phải bug, vì mảng là object nên được phân biệt như vậy.
Tuy nhiên, vì có nhiều cơ hội phân biệt xem đó có phải mảng không, nên có method chuyên dụng Array.isArray() trong object Array.
Khi sử dụng Array.isArray() và nhận giá trị trả về true, biến đó được xác định là kiểu any[].
tsif (Array .isArray (n )) {// n is any[]}
tsif (Array .isArray (n )) {// n is any[]}
Khi muốn xác định any[] là mảng của kiểu tùy ý, sử dụng các function kiểm tra kiểu như typeof hoặc Array.isArray() cho từng phần tử.
📄️ Kiểu unknown
Kiểu unknown của TypeScript được sử dụng khi không biết kiểu là gì.
📄️ Type guard function
Compiler của TypeScript phân tích type của biến tại mỗi vị trí trong control flow như if hay switch, tính năng này được gọi là control flow analysis (phân tích luồng điều khiển).