Javascript 有没有办法在运行前用Typescript检查函数参数是否有允许的值?

Javascript 有没有办法在运行前用Typescript检查函数参数是否有允许的值?,javascript,typescript,Javascript,Typescript,我有一个用Typescript编码的AngularJS服务。我使用如下参数setFalse('retrieve')调用服务的函数: 是否有某种方法可以消除对带引号的字符串“retrieve”的需要,使用常量或在运行时之前检查正在使用的值?1。是否有某种方法可以消除对带引号的字符串“retrieve”的需要? 您可以解除重载,并提供许多不同版本的函数 //just to give the idea function setFalse_retrieve(){ return setFalse('ret

我有一个用Typescript编码的AngularJS服务。我使用如下参数setFalse('retrieve')调用服务的函数:

是否有某种方法可以消除对带引号的字符串“retrieve”的需要,使用常量或在运行时之前检查正在使用的值?

1。是否有某种方法可以消除对带引号的字符串“retrieve”的需要? 您可以解除重载,并提供许多不同版本的函数

//just to give the idea
function setFalse_retrieve(){ return setFalse('retrieve') }
这样做的好处是它确实是类型安全的,并且永远无法使用错误的参数调用setFalse。缺点是有很多样板文件,如果愿意,您不能传递
属性

2.使用常数? Typescript具有此项的枚举功能:

enum Properties { retrieve, frobnicate };
现在,您可以在代码中使用
Properties.retrieve
而不是“retrieve”,它将捕获枚举名称中的任何键入错误

Properties.retriev; // Error: The property 'retriev' does not exist on value of type 'typeof Properties'.
请注意,Typescript使枚举值为整数,因此在调用角度函数时需要将它们转换为字符串:

var enumProperty = Properties.retrieve;     // 0
var strProperty = Properties[enumProperty]; // "retrieve"
枚举方法的缺点是,您可以在需要枚举值且运行时不会检测到错误的地方传递任何数字(请不要这样做):

3.使用常量或在运行时之前检查正在使用的值
Typescript在函数常量上具有函数重载功能,但您只能使用它根据输入专门化返回类型,而不能将有效输入限制为一组常量。也就是说,您仍然需要一个通用的case来接受任何字符串,而这些字符串不是您想要的。

一个case会满足您的需要吗?这些值是数字的,但是如果你需要的话,你可以得到名字。是的,那可能很好。我如何在这里实现枚举?
var enumProperty = Properties.retrieve;     // 0
var strProperty = Properties[enumProperty]; // "retrieve"
var x:Property = 10; // :(