gpt4 book ai didi

javascript - 有没有一种方法可以在使用 Typescript 运行时之前检查函数参数是否具有允许的值?

转载 作者:行者123 更新时间:2023-11-30 17:19:21 27 4
gpt4 key购买 nike

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

class StateService implements IStateService {

state = [];

get = (property: string) => {
return this.state[property];
}
setFalse = (property: string) => {
this.state[property] = false;
}
setNull = (property: string) => {
this.state[property] = null;
}
setTrue = (property: string) => {
this.state[property] = true;
}

// more code here

}

有什么方法可以消除对带引号的字符串“retrieve”的需要,使用常量或检查运行时之前使用的值吗?

最佳答案

1。有什么方法可以消除对带引号的字符串“retrieve”的需要吗?

您可以对重载进行脱糖,并提供该函数的许多不同版本。

//just to give the idea
function setFalse_retrieve(){ return setFalse('retrieve') }

这样做的好处是它确实是类型安全的,并且没有办法用错误的参数调用 setFalse。缺点是有很多样板文件,如果您愿意,您不能传递 property 值。

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 将枚举值设为整数,因此您需要在调用 Angular 函数时将它们转换为字符串:

var enumProperty = Properties.retrieve;     // 0
var strProperty = Properties[enumProperty]; // "retrieve"

枚举方法的缺点是您可以在需要枚举值的地方传递任何数字,并且在运行时不会检测到错误(不要那样做):

var x:Property = 10; // :(

3。使用常量或检查运行时之前使用的值

Typescript 在函数常量上有函数重载,但据我所知,您只能使用它来根据输入专门化返回类型,而不是将您的有效输入限制为一组常量。也就是说,您仍然需要一个接受任何字符串的通用案例,这不是您想要的。

关于javascript - 有没有一种方法可以在使用 Typescript 运行时之前检查函数参数是否具有允许的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25450204/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com