处理(类型|未定义)检查与Typescript的接口

时间:2017-07-26 03:46:36

标签: javascript typescript

在这里,我试图检查是否有"助推器" (Card [])在播放器界面中的boostersToGo变量中。如果有,我想转移()它并使其成为currentBooster。

但是,Typescript给了我一个错误:

message: 'Type 'Card[] | undefined' is not assignable to type 'Card[]'.
Type 'undefined' is not assignable to type 'Card[]'.'

我的编辑器(VSCode)在这里用红色标记了player.currentBooster。发生了什么事?我在使用打字稿之前遇到过类似的问题,但是他们已经在他们身上乱了一点。有什么方法可以解决这个问题?

if (player.boostersToGo.length > 0) {
    player.currentBooster = player.boostersToGo.shift()
}
//player is guaranteed to fit the interface Player because that's what's explicitly passed into the function

export interface Player {
    boostersToGo: Card[][]
    currentBooster: Card[]
    picks: Card[][]
    human: boolean
}

export interface Card {
    name: string
    manaCost: string
    colors?: string[]
    cmc: number
    types: string[]
    rarity: string
    imageUrl: string
    pick?: boolean
}

谢谢!

1 个答案:

答案 0 :(得分:1)

我无法在http://www.typescriptlang.org中重现它,所以它可能与您的TypeScript / IntelliSense版本相关,这也将更改您的lib.d.ts定义。

可能值得尝试在那里快速运行大部分有问题的代码,看看问题是否仍然存在。如果没有,可能升级到最新的TypeScript版本或更新VSCode会有所帮助。

否则,您始终可以使用Type Assertion (casting)强制执行类型:

if (player.boostersToGo.length > 0) {
    player.currentBooster = player.boostersToGo.shift() as Card[];
}
相关问题