什么是Typescript中的const / type模式

时间:2017-07-03 11:49:58

标签: reactjs typescript types react-redux

export const INCREMENT_ENTHUSIASM = 'INCREMENT_ENTHUSIASM';
export type INCREMENT_ENTHUSIASM = typeof INCREMENT_ENTHUSIASM;


export const DECREMENT_ENTHUSIASM = 'DECREMENT_ENTHUSIASM';
export type DECREMENT_ENTHUSIASM = typeof DECREMENT_ENTHUSIASM;

这里发生了什么?我无法理解这一点。这非常令人困惑 这是{strong>添加操作部分下的https://github.com/Microsoft/TypeScript-React-Starter

我知道类型关键字做了什么,但这里看起来很混乱。

enter image description here

2 个答案:

答案 0 :(得分:2)

您发布的示例背后的想法是导出值和类型,以便您能够执行以下操作:

let myVar: INCREMENT_ENTHUSIASM;

如果该行:

type INCREMENT_ENTHUSIASM = typeof INCREMENT_ENTHUSIASM

缺少上述变量声明会引发错误:

  

找不到名称' DECREMENT_ENTHUSIASM'

typescript中的一些东西既是类型又是值,比如枚举和类,但是接口或类型别名只是类型,在这种情况下,您可以重用类型名称来创建值。
例如:

type MySingleton = {
    getId(): string;
    doSomething1(str: string): string;
    doSomething2(num: number): number;
}

const MySingleton: MySingleton = {
    getId: function () {
        ...
    },
    doSomething1: function(str: string): string {
        ...
    },
    doSomething2: function (num: number): number {
        ...
    }
}

有关打字稿中类型/值的更多信息,请访问:Declaration Merging - Basic Concepts

修改

type INCREMENT_ENTHUSIASM = typeof INCREMENT_ENTHUSIASM;

等于:

type INCREMENT_ENTHUSIASM = "INCREMENT_ENTHUSIASM";

这使INCREMENT_ENTHUSIASM字符串只能是"INCREMENT_ENTHUSIASM"

答案 1 :(得分:0)

顺便说一句,为了避免重复(并避免可能的拼写错误),我制定了这样的习惯用法:

export const ShowIdEnum = new class {
  readonly ALWAYS = 'always';
  readonly LABEL = 'label';
  readonly NEVER = 'never';
};
export type ShowIdEnum = typeof ShowIdEnum[keyof typeof ShowIdEnum];

希望它会有所帮助;)