Một số type đặc biệt liên quan đến function trong TS
TIL
787
TypeScript
13
White

unique_name viết ngày 05/12/2021

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ặc return 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ú ý: voidundefined 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ì objectObject 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 unknownthì 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)

alt text

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

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

unique_name

2 bài viết.
28 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Bài viết liên quan
White
1 5
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết gần 4 năm trước
1 5
White
20 3
(Link) (Link) — tracks device battery state. (Link) (Link) — tracks geo location state of user's device. (Link) (Link) — tr...
Đinh Viễn viết gần 3 năm trước
20 3
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
2 bài viết.
28 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!