TS中可以使用enum或者const enum声明枚举,应该都知道就不说了。这个写法有一个问题,就是必须导入才能使用。在类型本身其实并不需要导入的情况下,由于引用了枚举导致类型也需要导入,且由此派生的都需要导入,比如下面这样,作为强迫症就很难忍了。

/** xx.ts **/
export enum DemoEnum {
  Hello
}

/** typings.d.ts **/
import {Hello} from 'xx';
interface Demo {
  hello: Hello;
}

/** otherTypings.d.ts **/
import {Demo} from 'typings';
interface Demo2 extend Demo {
    other: any;
}

反正我是宁可多些点代码也不希望看到多余的引用的,所以就有了现在这个写法。目的就是把类型和常量分离,这样所有的d.ts文件中就不会出现import了。

/** typings.d.ts **/
declare module Demo {
  type Hello = 'Hello';
  type World = 'World';
  type DemoEnum = Hello | World;
  
  interface Demo {
    demo: DemoEnum;
  }
}
/** constants.ts **/
const DemoEnum: {Hello: Demo.Hello; World: Demo.World} = {Hello: 'Hello', World: 'World'};
export const DemoConstants = {
  DemoEnum,
}

如果你有更好的办法请告诉我哈,不胜感激。


NickWang
1.3k 声望132 粉丝

程序猿中的斗战剩猿