Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Một số type đặc biệt liên quan đến function trong TS
Hàm là một phần rất quan trọng của bất kì ứng dụng nào. Giúp tổ chức code tốt hơn. Trong Javascript cũng vậy. Typescript cũng có hệ thống type rất tốt cho các hàm.
Bài viết dưới đây sẽ trình bày về một số type đặc biệt thông thường "dính líu" tới hàm trong TS
Type đặc biệt là gì? Sao gọi là đặc biệt?
Chỉ là không phải các type cơ bản thông thường hay dùng với biến, constant như string
. number
, boolean
, null
...
void
void
thường được dùng để biểu diễn type trả về của các hàm không trả về giá trị nào. Tương tự như C++, Java.
Thế nào gọi là không trả về giá trị nào?
- K có câu lênh return
- Có return nhưng toàn là
return;
hoặcreturn undefined;
Chú ý rằng return undefined;
vẫn ok với void
. Nhưng tsc sẽ báo lỗi với return 1;
, return '';
...
Ví dụ:
function testVoid(): void {
console.log('Hello');
return;
}
Trong Javascript, nếu một hàm func
không có giá trị trả về mà func()
lại được gán cho một biến, thì biến đó có giá trị undefined
. Nếu sau đó biến này thực hiện các phép toán +
, -
... hay .property
, .method()
thì sẽ rất nguy hiểm.
Typescript đã ngăn chặn điều này, một biến type void
ko thể hàm những hành động đó
declare const testFunc: () => void;
const val = testFunc(); //val: void;
val.method(); //Error
console.log(val + 1); //Error
Chú ý: void
và undefined
vẫn là 2 type khác nhau.
object
Type object
biểu diễn cho những giá trị không phải primitive: number
, string
, boolean
, null
, undefined
, Symbol
, bigint
. Có nghĩa là nó bao gồm các hàm, object hay mảng.
Trong Js thì hàm cũng là object, cũng có thể có property, method, dùng dc với Object.keys()
...
Một biến type object
có các property chung cho mọi object, dùng đc cho cả mảng, function: hasOwnProperty
, toString
, toLocaleString
...
Chú ý: trong TS thì object
và Object
là khác nhau. Nhưng hầu như chúng ta không bao giờ dùng tới Object
.
unknown
Một biến type unknown
có nghĩa là nó có thể nhận mọi giá trị, giống như any
, nhưng nó an toàn hơn.
Vì sao an toàn hơn? Vì any
thì dùng gì nó cũng ko báo lỗi, còn unknown
thì làm gì nó cũng báo lỗi (ngăn chặn mình làm 1 hành động nguy hiểm với 1 biến type k xác định)
Khi dùng unknown
, bạn phải narrow giá trị trước khi sử dụng. Ví dụ
declare const t: unknown;
if (typeof t === 'string') {
t.charCodeAt(0); //ok;
}
else if (typeof t === 'number') {
t.toFixed(); //ok
}
else if (Array.isArray(t)) {
t.concat([]); //ok
}
unknown
được dùng khi bạn muốn viết 1 hàm có tham số nhận mọi loại giá trị ví dụ như deepCompare
never
Nếu một hàm không bao giờ return giá trị, thì nó nên có return type là never
:
- Luôn throw Error
- Terminate giữa chừng
function neverReturnFunc(): never {
throw new Error('Err');
}
Function
Đây là một built-in interface trong Typescript, interface này bao gồm các method bind
, call
, apply
và các property chung cho mọi hàm trong TS.
Ngoài ra còn có một call signature (...args: any[]) => any
Mọi hàm đều có thể gán vào biến type Function
Chúng ta nên hạn chế dùng type này vì nó nguy hiểm, khi mà nó cho phép gọi với mọi tham số, trả về type any
Ref
https://www.typescriptlang.org/docs/handbook/2/functions.html#function
unique_name 05-12-2021



