只有常量的Typescript类

时间:2017-08-03 10:33:18

标签: angular typescript ionic2 constants ionic3

我想将缓存密钥保存在一个中心位置。我想将其作为一个常量文件。此时我已经在每个页面都声明了缓存键,但我需要它。但我需要删除那个重复。我该怎么做?

缓存密钥声明之一:

purchasedOfflineArticlesKey: string = 'myLibraryPurchasedOfflineArticles';

你能告诉我一个合适的设计吗?我是否需要为此创建一个类,并在其他需要的地方或其他任何方式使用该类?希望你能为此提供反馈。

更新:

我有如下的缓存服务。

本地高速缓存service.ts

import { Injectable } from '@angular/core';
import { CacheService } from "ionic-cache";

@Injectable()
export class LocalCacheServiceProvider {

  constructor(private cache: CacheService) { }

  //get Item
  getItem(key: string): Promise<any> {
    return this.cache.getItem(key);
  }
}

我用过这样的话:

离线articles.ts

private purchasedOfflineArticlesKey: string = 'myLibraryPurchasedOfflineArticles';

 constructor(private localCacheService: LocalCacheServiceProvider) {
  }

     ionViewDidLoad() {
        this.localCacheService.getItem(this.purchasedOfflineArticlesKey).then(values => {
          this.arrangeMyOfflineArticles(values);
        }).catch(reason => {
        });
      }

2 个答案:

答案 0 :(得分:2)

在我的一个项目中,我已经在名为constants.ts的文件中为此目的定义了名称空间。你也可以做到的。以下是一些示例代码:

export namespace AppConstants
{
    // Class for general global variables.
    export class General
    {
       public static readonly WELCOME_TITLE = 'Welcome to my App';
    };
}

在我想要使用常量的应用程序中,我正在导入此命名空间:

import { AppConstants } from './core/common/constants';

我可以访问这些常量,如:

myMethod(){
    console.log(AppConstants.General.WELCOME_TITLE);
}

答案 1 :(得分:2)

不应将类用于无法从类实例化中受益的东西。

一种选择是将它们作为导出放在单独的文件中,这样就可以在导入时解析不存在的键:

export const foo = 'foo';
export const bar = 'bar';

或者,可以将缓存键声明为对象键,例如,在声明缓存服务的地方。

export const CACHE_KEYS = {
    foo: 'foo',
    bar: 'bar'
};

@Injectable()
export class LocalCacheServiceProvider {
  constructor(private cache: CacheService) { }

  getItem(key: keyof typeof CACHE_KEYS): Promise<any> {
    return this.cache.getItem(key);
  }
}

该服务可以使用keyof约束来限制已知密钥的密钥。

根据应用程序的设计,每个模块/组件可以扩展LocalCacheServiceProvider和密钥集,以便为设备提供唯一的密钥集。