TypeScript 实现常量类

最近在学习使用Ionic2,在使用ngrx(https://github.com/ngrx/store) 时,想把所有的ActionType放到一个文件中定义,我是做JAVA的自然是想到JAVA中经常使用到的常量类。想着也要用TypeScript实现一个。

按照JAVA的套路,直接以下代码就轻松搞定了

   interface ActionType{
          String  ADD_TASK = "ADD_TASK";
    }

但是在TypeScript中似乎是行不通的,首先interface没有初始化,不能够直接赋值;其次使用class,对属性使用const肯定是不行,使用 readonly 可以实现属性只读,但是class又有还需要new 才能用。

理一下,目前的现状,我想要实现的功能是使用ActionType.ADD_TASK 就能使用常量字符串"ADD_TASK"。而TypeScript 中使用的都是对象,也就是说我不能通过类型来获取数据,只能通过对象。通过导入import { ActionType } from '../..' 得到的应该是一个对象,且这个对象只有一个不能够修改。那么在我的ActionType定义文件中 就只能通过下面这种方式来暴露ActionType

 export const ActionType = {};

首先得保证ActionType 是一个不可修改的对象,就使用const将其设置为常量。然后需要构造一个对象,这个对象就是用来存储我们需要的ActionName,自然这些属性必须是只读的了。因此,可以事先定义好一个接口,接口的属性必须是只读的,然后在构造对象的时候就可以指定值,且不可修改了。

  interface TaskActionTypeInterFace{
            readonly ADD_TASK : string ;
            readonly VIEW_TASK : string ;
  }

  interface PlanActionTypeInterFace{
            readonly ADD_PLAN : string ;
            readonly VIEW_PLAN : string ;
  }

 interface ActionTypeInterFace {
           readonly TASK : TaskActionTypeInterFace ;
           readonly PLAN : PlanActionTypeInterFace ;
 }

/**
 * Action 常量定义 
 */
export const ActionType : ActionTypeInterFace = {
       TASK : { ADD_TASK : 'ADD_TASK', VIEW_TASK : 'VIEW_TASK'},
       PLAN : { ADD_PLAN : 'ADD_PLAN', VIEW_PLAN : 'VIEW_PLAN'}
}

可能你会觉得,一个堆常量而已,直接用 export const XXX='XXX'就好了,干嘛非得这么费事。其实也没什么,想要个面向对象,然后import的时候只用一句话就好。

你可能感兴趣的:(TypeScript 实现常量类)