翻阅官方文档,函数重载的类型检查有下面的例子:
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 {
// 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);
尝试将第四行function pickCard(x: number): {suit: string, card: number};
改成function pickCard(x: number): {suit: string, card: boolean};
为什么ts不会检查出类型错误?此时pickedCard2
使用了这一行重载类型,return出来的类型应该不能通过类型检查。请教为什么?
上面几个签名都是暴露给外面的,最后一个才是约束……