首页 > 解决方案 > Typescript:可以使用枚举作为函数参数类型吗?

问题描述

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

假设你有这个枚举:

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

那么这样输入我的函数参数可以吗?意思是'我希望收到一个字符串'foo'或'bar'作为参数并希望返回'foo'或'bar'

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

标签: typescriptenums

解决方案


使用enumas 参数非常好。

您可能要考虑的唯一一件事(但在大多数情况下可以忽略不计)是将 anenum包含在生成的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';

编辑- 感谢 Aleksey L.

您还可以定义 a const enum,它也不包含在生成的代码中。

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

并且在使用时

var bar = fooEnum.Bar;

以下代码将生成为

var b = 'bar';

const enum VS 字符串文字类型

使用这种const enum方法,您是否发现只是个人喜好

doStuff(fooEnum.Bar);

string literal类型

doStuff('bar');

更具可读性。在这两种情况下,生成的结果将是相同的。


推荐阅读