Typescript:可以使用enum作为函数参数类型吗?

时间:2018-07-12 08:41:09

标签: typescript enums

一个简单的问题,但是我有一个疑问,找不到答案。

假设您有这个枚举:

export enum fooEnum {
    Foo = 'foo',
    Bar = 'bar'
}

然后以这种方式键入我的函数参数可以吗?意思是“我希望接收字符串'foo'或'bar'作为参数,并期望返回'foo'或'bar'

function doStuff(myParam: FooEnum): FooEnum {
    return myParam;
};

2 个答案:

答案 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中是正确的。