Typescript:动态设置变量类型

Edu*_*rdo 1 javascript typescript

我有两个变量:

let locals 
let visitants
Run Code Online (Sandbox Code Playgroud)

它们中的每一个都可以是PlayerDto或类型TeamDto。类型将取决于名为 的第三个变量competitor_type。如果competitor_typeplayer,那么我需要将玩家列表分配给localsvisitants,其他方式分配给团队列表。

我正在使用“任何”解决它

locals: any
teams: any
Run Code Online (Sandbox Code Playgroud)

有更好的方法解决吗?

Jon*_*lms 5

您应该将不同的版本包装在一个对象中,以便能够缩小类型范围:

let state: {
  type: "player";
  locals: PlayerDto[] | undefined;
   visitants: PlayerDto[] | undefined;
} | {
  type: "team";
  locals: TeamDto[] | undefined;
  visitants: TeamDto[] | undefined;
} = { type: "player" };
Run Code Online (Sandbox Code Playgroud)

那么你的代码始终是类型安全的:

 if(state.type === "player") {
   state.locals // is of type PlayerDto[]
 }

 state.locals // is of type PlayerDto[] | TeamDto[]
Run Code Online (Sandbox Code Playgroud)

要更改类型,请执行以下操作:

 state = { type: "team" };
Run Code Online (Sandbox Code Playgroud)

那么你可以重新分配state.localsstate.visitants