我想知道是否有办法在脚本情况下将变量标记为特定类型而不为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;
}
祝你好运
答案 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),
}