素材牛VIP会员
Typescript类型检查问题
 大***咒  分类:JavaScript  人气:789  回帖:1  发布于6年前 收藏

翻阅官方文档,函数重载的类型检查有下面的例子:

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出来的类型应该不能通过类型检查。请教为什么?

讨论这个帖子(1)垃圾回帖将一律封号处理……

Lv5 码农
38***38 职业无 6年前#1

上面几个签名都是暴露给外面的,最后一个才是约束……

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取