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。
我知道类型关键字做了什么,但这里看起来很混乱。
答案 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];
希望它会有所帮助;)