简单的问题,但我有疑问,找不到答案。
假设你有这个枚举:
export enum fooEnum {
Foo = 'foo',
Bar = 'bar'
}
Run Code Online (Sandbox Code Playgroud)
那么这样输入我的函数参数可以吗?意思是'我希望收到一个字符串 'foo' 或 'bar' 作为参数并期望返回 'foo' 或 'bar'
function doStuff(myParam: FooEnum): FooEnum {
return myParam;
};
Run Code Online (Sandbox Code Playgroud)
使用enumas 参数完全没问题。
您可能要考虑的唯一一件事(但在大多数情况下可以忽略不计)是enum将包含在生成的JavaScript.
export enum fooEnum {
Foo = 'foo',
Bar = 'bar'
}
Run Code Online (Sandbox Code Playgroud)
将生成以下JavaScript代码(或类似代码):
var fooEnum;
(function (fooEnum) {
fooEnum["Foo"] = "foo";
fooEnum["Bar"] = "bar";
})(fooEnum || (fooEnum = {}));
Run Code Online (Sandbox Code Playgroud)
作为替代方案,您可以使用String Literal类型,它不会包含在生成的代码中。
export type fooType = 'foo' | 'bar';
Run Code Online (Sandbox Code Playgroud)
编辑- 感谢 Aleksey L.
您还可以定义一个const enum,它也不包含在生成的代码中。
export const enum fooEnum {
Foo = 'foo',
Bar = 'bar'
}
Run Code Online (Sandbox Code Playgroud)
并且在使用时
var bar = fooEnum.Bar;
Run Code Online (Sandbox Code Playgroud)
以下代码将生成为
var b = 'bar';
Run Code Online (Sandbox Code Playgroud)
const 枚举 VS 字符串文字类型
这种const enum方法归结为个人喜好
doStuff(fooEnum.Bar);
Run Code Online (Sandbox Code Playgroud)
或string literal类型
doStuff('bar');
Run Code Online (Sandbox Code Playgroud)
更具可读性。在这两种情况下生成的结果将是相同的。
| 归档时间: |
|
| 查看次数: |
4313 次 |
| 最近记录: |