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的时候只用一句话就好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,258评论 9 118
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 最近在工作中大量用到了 redis 服务器。按照官方的说明, redis 是一个开源的基于内存数据结构的缓存数...
    阿土伯已经不是我阅读 441评论 0 5
  • 今天我在网上看见一组小学生的另类作品,一下子把我逗乐了。他们的文字鲜活,感情真挚。谁说作文很难写?咱今天就和这几个...
    荆芥草阅读 854评论 5 8
  • 原文:臣服的好处就是,当你接纳了当下,不徒然浪费力气去抗争的时候,事情往往会有意想不到的转机出现,你才发现原来的挣...
    王朋彦阅读 2,574评论 2 0