typescript - Typescript:可以使用枚举作为函数参数类型吗?
问题描述
简单的问题,但我有疑问,找不到答案。
假设你有这个枚举:
export enum fooEnum {
Foo = 'foo',
Bar = 'bar'
}
那么这样输入我的函数参数可以吗?意思是'我希望收到一个字符串'foo'或'bar'作为参数并希望返回'foo'或'bar'
function doStuff(myParam: FooEnum): FooEnum {
return myParam;
};
解决方案
使用enum
as 参数非常好。
您可能要考虑的唯一一件事(但在大多数情况下可以忽略不计)是将 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');
更具可读性。在这两种情况下,生成的结果将是相同的。
推荐阅读
- python - 如何通过在python上的表中获取其他两行的百分比来创建新行
- python - R 与 Python 中的 POST 请求
- excel - 基于单个字段合并 Excel 行
- node.js - Sockets.io 问题:WebSocket 在建立连接之前关闭
- sql-server - 使用 SQL 服务器数据库 VB.Net 中的数据自动填充组合框
- html - 选项卡内容未显示在固定位置
- python - Python模拟一个类 - 方法被调用两次
- python - 如何在进程之间正确共享 Manager dict
- python - 在 Python 中 - 有没有办法将列中的数据提取到一个特定的字符?
- java - 查询 Google Maps API 时本地托管的 SparkJava 代理服务器停止