2.2 Function Types

2.2.1 Functions with a single argument

การเขียนที่เรามักใช้สำหรับ Function ในคณิตศาสตร์ดูเหมือนเช่นนี้:
f: A → B
ซึ่งหมายความว่า ถ้าคุณให้บางสิ่งที่เป็น Type A มันจะให้บางสิ่งที่เป็น Type B เช่น Function ที่ยกกำลังเลข

function square(x) { return x * x;}

มี Type เป็น square: number → number
เราสามารถประกาศ Type อย่างชัดเจนใน TypeScript เช่น MathFunction โดยใช้คำสั่ง Type:

Type MathFunction = (x: number) => number;

2.2.2 Functions with multiple arguments

ตอนนี้เรามาดูกรณีที่ Function มีมากกว่าหนึ่ง arguments สมมติว่าคุณมี Function ที่บวกสองจำนวนใน TypeScript:

function add(x: number, y: number): number { return x + y; }

Function นี้มี Type เป็น (x: number, y: number) => number
คุณจะเห็นว่าเราสามารถกำหนด Function add ให้กับตัวแปรของ Type MathFunction ได้

Type MathFunction = (x: number, y: number) => number;

2.2.3 Generic Types

แนวคิดของ generics จะเข้ามาใช้เมื่อเราต้องการให้ Type เปลี่ยนแปลงได้ ตัวอย่างที่ใช้บ่อยคือ Function identity:

function id(x: number): number {
  return x;
}

identity ใช้ได้กับทุก Type ไม่ใช่แค่ number และเราต้องการใช้มันใหม่โดยไม่ต้องประกาศสำหรับทุก Type ดังนั้นเราจึงต้องทำให้ Type เป็น Generic การประกาศจะตรงไปตรงมาใน TypeScript:

function identity<T>(x: T): T {
  return x;
}

จากนั้นเราสามารถใช้ Type เฉพาะแทน <T> เพื่อใช้กับ Type นั้นๆ:

var y: number = identity<number>(5); // นี่คือ identity สำหรับ number  
var z: string = identity<string>("jim"); // นี่คือ identity สำหรับ string  

แน่นอนว่านี่คือตัวอย่างที่ง่ายที่สุด Generics สามารถซับซ้อนขึ้นได้ ตัวอย่างเช่น เราสามารถทำให้ Function add เป็น generic ได้

function add<T>(x: T, y: T): T {
  return x + y;  
}

อย่างไรก็ตาม เราไม่สามารถกรอกข้อมูลนี้ในวิธีที่ไม่ซับซ้อนสำหรับ T ได้ เนื่องจากที่ระดับการอธิบายนี้ การบวกทำได้เฉพาะสำหรับตัวเลข

ในหนังสือเล่มนี้ เราจะใช้การเขียนแบบ Generics <T> เมื่อเราพูดถึง Type