Javascript 在带有Typescript的接口中处理(类型|未定义)检查

Javascript 在带有Typescript的接口中处理(类型|未定义)检查,javascript,typescript,Javascript,Typescript,在这里,我试图检查在播放器界面的boostersToGo变量中是否有一个“booster”(卡片[])。如果有,我想将其移位,使其成为当前的助推器 但是,Typescript给了我一个错误: message: 'Type 'Card[] | undefined' is not assignable to type 'Card[]'. Type 'undefined' is not assignable to type 'Card[]'.' 我的编辑器(VSCode)在这里用红色标出player

在这里,我试图检查在播放器界面的boostersToGo变量中是否有一个“booster”(卡片[])。如果有,我想将其移位,使其成为当前的助推器

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

message: 'Type 'Card[] | undefined' is not assignable to type 'Card[]'.
Type 'undefined' is not assignable to type 'Card[]'.'
我的编辑器(VSCode)在这里用红色标出player.currentBooster。发生什么事?在使用typescript之前,我也遇到过类似的问题,但我已经对它们进行了一些修改。处理这个问题的正确方法是什么

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
}

谢谢

我无法在中复制它,因此它可能与您的
TypeScript
/
IntelliSense
版本有关,这也将更改您的定义

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

否则,您始终可以通过以下方式强制执行类型:


要使错误生效,需要将
strictNullChecks
(或包含
strict
)编译器选项设置为
true
。另一个选项是使用TypeScript的:
player.currentBooster=player.boostersToGo.shift()尝试此播放器。boostersToGo.shift()已修复。我想我必须把所有不确定的东西都投进去?谢谢
if (player.boostersToGo.length > 0) {
    player.currentBooster = player.boostersToGo.shift() as Card[];
}