TypeScript > Function ▶︎ http://babel.codes/TypeScript/Function
/**
* Table of content:
*
* 1/ Definition
* 2/ Types
* 3/ Optional and Default Parameters
* 4/ Rest Parameters
* 5/ See `this`
* 6/ Overloads
*
*/
// 1/ Definition: a) Named function
function add(x, y) { return x + y; }
// 2/ Types: a) Typing parameters (Named function)
function add(x: number, y: number): number { return x + y; }
// 1/ Definition: b) Anonymous function
let myAdd = function(x, y) { return x + y; };
// 2/ Types: a) Typing parameters (Anonymous function)
let myAdd = function(x: number, y: number): number { return x + y; };
// 2/ Types: b) Function type
let myAdd: (something: number, somethingElse: number) => number =
function(x: number, y: number): number { return x + y; };
// 3/ Optional and Default Parameters: a) Required (by default)
function buildName(firstName: string, lastName: string) {
return firstName + " " + lastName;
}
let result1 = buildName("Bob"); // ERROR, too few parameters
let result2 = buildName("Bob", "Adams", "Sr."); // ERROR, too many parameters
let result3 = buildName("Bob", "Adams"); // ah, just right
// 3/ Optional and Default Parameters: b) Optional
function buildName(firstName: string, lastName?: string) {
if (lastName)
return firstName + " " + lastName;
else
return firstName;
}
let result1 = buildName("Bob"); // works correctly now
let result2 = buildName("Bob", "Adams", "Sr."); // ERROR, too many parameters
let result3 = buildName("Bob", "Adams"); // ah, just right
// 3/ Optional and Default Parameters: c) Default-initialized parameters
function buildName(firstName = "Will", lastName: string) {
return firstName + " " + lastName;
}
let result1 = buildName("Bob"); // error, too few parameters
let result2 = buildName("Bob", "Adams", "Sr."); // error, too many parameters
let result3 = buildName("Bob", "Adams"); // okay and returns "Bob Adams"
let result4 = buildName(undefined, "Adams"); // okay and returns "Will Adams"
// 4/ Rest Parameters
function buildName(firstName: string, ...restOfName: string[]) {
return firstName + " " + restOfName.join(" ");
}
let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");
// 6/ Overloads
let suits = ["hearts", "spades", "clubs", "diamonds"];
function pickCard(x: {suit: string; card: number; }[]): number; // Overloads #1
function pickCard(x: number): {suit: string; card: number; }; // Overloads #2
function pickCard(x): any {
// Check to see if we're working with an object/array
// if so, they gave us the deck and we'll pick the card
if (typeof x == "object") {
let pickedCard = Math.floor(Math.random() * x.length);
return pickedCard;
}
// Otherwise just let them pick the card
else if (typeof x == "number") {
let pickedSuit = Math.floor(x / 13);
return { suit: suits[pickedSuit], card: x % 13 };
}
}
let myDeck = [{ suit: "diamonds", card: 2 }, { suit: "spades", card: 10 }, { suit: "hearts", card: 4 }];
let pickedCard1 = myDeck[pickCard(myDeck)];
alert("card: " + pickedCard1.card + " of " + pickedCard1.suit);
let pickedCard2 = pickCard(15);
alert("card: " + pickedCard2.card + " of " + pickedCard2.suit);