如何用打字稿表示航班上的类型

时间:2018-02-04 12:43:24

标签: javascript typescript types

我想知道是否有办法在脚本情况下将变量标记为特定类型而不为TS编译器定义新变量?我将此作为RoleCard用" as"但我不想定义var

const card = this.deck.shift();

switch (card.type) {
  case CardType.ROLE:
    const roleCard = card as RoleCardMeta;

    const activeCard: ActiveCard = {
      remainingTurns: _.random(roleCard.minTurns, roleCard.maxTurns),
      roleCard,
    };
    this.activeCards.push();
    break;
}

祝你好运

2 个答案:

答案 0 :(得分:2)

type文字和联合类型上使用类型保护:

interface CardBase {
    someField: any;
}

enum CardType {
    ROLE,
    OTHER
}

interface RoleCardMeta extends CardBase {
    type: CardType.ROLE;
    minTurns: number;
    maxTurns: number;
}

interface OtherCardMeta extends CardBase {
    type: CardType.OTHER;
    otherField: string;
}

type Card = RoleCardMeta
    | OtherCardMeta;

function test(card: Card) {
    switch (card.type) {
        case CardType.ROLE:
            console.log(card.minTurns, card.maxTurns);
            break;

        case CardType.OTHER:
            console.log(card.otherField);
            break;
    }
}

答案 1 :(得分:0)

我几乎和你@oryol一样,但我必须添加以下内容才能使它工作:

case CardType.STANDARD:
    return {
      remainingTurns: _.random((card as MessageCardMeta).minTurns, (card as MessageCardMeta).maxTurns),
    }