函数
函数类型
function add (x: number, y: number): number {
return x + y;
}
let myAdd: (x: number, y: number) => number = function (x: number, y: number): number {
return x + y;
}
复制代码
可选参数和默认参数
function buildNameA (firstName: string, lastName?: string) {
return lastName ? `${firstName}.${lastName}` : `${firstName}`;
}
console.log(buildNameA('Bob'));
console.log(buildNameA('Bob', 'Adams'));
function buildNameB (firstName = 'Will', lastName: string) {
return lastName ? `${firstName}.${lastName}` : `${firstName}`;
}
console.log(buildNameB('Bob', 'Adams'));
console.log(buildNameB(undefined, 'Adams'));
function buildNameC (firstName: string, ...restOfName: string[]) {
return `${firstName}, ${restOfName.join(', ')}`;
}
console.log(buildNameC('Joseph', 'Samuel', 'Lucas', 'MacKinzie'));
复制代码
this
interface Card {
suit: string;
card: number;
}
interface Deck {
suits: string[];
cards: number[];
createCardPicker(this: Deck): () => Card;
}
let deck: Deck = {
suits: ["hearts", "spades", "clubs", "diamonds"],
cards: Array(52),
createCardPicker: function(this: Deck) {
return () => {
let pickedCard = Math.floor(Math.random() * 52);
let pickedSuit = Math.floor(pickedCard / 13);
return {
suit: this.suits[pickedSuit],
card: pickedCard % 13
}
};
}
}
let cardPicker = deck.createCardPicker()
let pickedCard = cardPicker()
console.log('card: ' + pickedCard.card + ' of ' + pickedCard.suit);
interface UIElement {
addClickListener(onclick: (this: void, e: Event) => void): void
}
class Handler {
info: string;
onClickBad = (e: Event) => {
this.info = e.message;
}
}
let handler = new Handler();
uiElement.addClickListener(handler.onClickBad);
复制代码
重载
let suits = ['hearts', 'spades', 'clubs', 'diamonds'];
function pickCard(x: {suit: string; card: number}[]): number;
function pickCard(x: number): {suit: string; card: number};
function pickCard(x): any {
if (typeof x === 'object') {
let pickedCard = Math.floor(Math.random() * x.length);
return pickedCard;
} 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 }];
console.log(pickCard(myDeck));
console.log(pickCard(15));
复制代码