一个简单的问题,但是我有一个疑问,找不到答案。
假设您有这个枚举:
export enum fooEnum {
Foo = 'foo',
Bar = 'bar'
}
然后以这种方式键入我的函数参数可以吗?意思是“我希望接收字符串'foo'或'bar'作为参数,并期望返回'foo'或'bar'
function doStuff(myParam: FooEnum): FooEnum {
return myParam;
};
答案 0 :(得分:3)
使用enum
作为参数很好。
您可能要考虑的唯一事情(但在大多数情况下可以忽略不计)是在生成的enum
中将包含一个JavaScript
。
export enum fooEnum {
Foo = 'foo',
Bar = 'bar'
}
将生成以下JavaScript
代码(或类似代码):
var fooEnum;
(function (fooEnum) {
fooEnum["Foo"] = "foo";
fooEnum["Bar"] = "bar";
})(fooEnum || (fooEnum = {}));
或者,您可以使用String Literal类型,该类型将不包含在生成的代码中。
export type fooType = 'foo' | 'bar';
编辑-感谢AlekseyL。
您还可以定义一个const enum
,它也不包含在生成的代码中。
export const enum fooEnum {
Foo = 'foo',
Bar = 'bar'
}
使用时
var bar = fooEnum.Bar;
以下代码将生成为
var b = 'bar';
const枚举VS字符串文字类型
通过const enum
方法,无论您是否找到,都取决于个人喜好
doStuff(fooEnum.Bar);
或string literal
类型
doStuff('bar');
更具可读性。两种情况下生成的结果都是相同的。
答案 1 :(得分:1)
enum
与其他任何类型一样,可以用作参数,也可以用作返回类型。是的,该语法可以正常工作。
我不知道为什么您需要传递一个Enum
值然后返回一个不同的Enum
值,但是您仍然可以执行自己的操作,并且在TypeScript中是正确的。