打字稿全球词典

时间:2020-09-30 17:00:46

标签: angular typescript enums global global-object

我正在尝试用Angular编写一些飞镖游戏。而且我希望程序中的每个字段都分开,所以我写了这样的东西。

export interface DartboardFieldsData{
  name: string;
  value: number;
  shortcut: string;
  multiplier: number;
}

export class DartboardField implements DartboardFieldsData{
  constructor(
    public readonly name: string,
    public readonly value: number,
    public readonly shortcut: string,
    public readonly multiplier: number){}
}

const S1 = new DartboardField('SINGLE_1', 1, 'S1', 1)
const S2 = new DartboardField('DOUBLE_1', 2, 'D1', 2)
...
const BULL = new DartboardField('BULL', 50, 'B', 2)
const MISS = new DartboardField('MISS', 0, '0', M)
// all fields

现在我想将它们存储在全局只读字典中

const DARTBOARD_FIELDS: {[shortcut: string]: DartboardFieldsData} = {
  'S1': S1,
  'D1': S2,
   //... rest of fields
};

我可能想为单打,双打,三重和扇区(按数字分隔)设置另一本字典,也许更多

readobly DARTBOARD_SINGLES: {[shortcut: string]: DartboardFieldsData} = {
  'S1': S1
  'S2': S2
   ...
  'S20': S20
};

我应该如何存储所有这些数据?我希望从程序开始(至少是主要程序)开始就可以使用它。

1 个答案:

答案 0 :(得分:1)

这是一个可以帮助您的stackblitz演示:link 我来解释一下:
您可以创建一个服务,在其中将有关飞镖盘字段和单打的所有内容放入其中,我称该服务为dart-board.service.ts,DARTBOARD_FIELDS是私有的,因此无法被其使用。
之后,您可以将服务注入到要使用dart字段的组件中,对于我在app.component.ts中进行的演示,

constructor(private dartBoardService: DartBoardService) {}

现在您可以使用getter从服务中检索所需的值:

this.dartBoardFields = this.dartBoardService.getDartBoardFields()