Javascript 在typescript中声明最小/最大长度的字符串类型
看完文档后,似乎没有直接的方法来检查字符串数据类型的最小/最大长度Javascript 在typescript中声明最小/最大长度的字符串类型,javascript,string,typescript,validation,constraints,Javascript,String,Typescript,Validation,Constraints,看完文档后,似乎没有直接的方法来检查字符串数据类型的最小/最大长度 但是,有没有一种方法可以使用一些自定义类型来声明字符串数据类型,以便它检查字符串长度是否符合给定的界限?您可以使用类型构造函数和称为“幻影类型”(Phantom type)的东西来实现这一点,这是一种确保不能将类型直接指定给值的技术 下面是一个使用以下技术的StringOfLength类型的示例: 类型StringOfLength=string&{ StringOfLength:唯一符号//这是幻影类型 }; //这是一个类型保
但是,有没有一种方法可以使用一些自定义类型来声明字符串数据类型,以便它检查字符串长度是否符合给定的界限?您可以使用类型构造函数和称为“幻影类型”(Phantom type)的东西来实现这一点,这是一种确保不能将类型直接指定给值的技术 下面是一个使用以下技术的
StringOfLength
类型的示例:
类型StringOfLength=string&{
StringOfLength:唯一符号//这是幻影类型
};
//这是一个类型保护函数,可用于断言字符串
//是StringOfLength类型
常数isStringOfLength=(
str:string,
敏:敏,,
马克斯:马克斯
):str是StringOfLength=>str.length>=min&&str.length{
如果(输入类型!=“字符串”){
抛出新错误(“无效输入”);
}
如果(!IsStringOfflength(输入、最小值、最大值)){
抛出新错误(“输入不在指定的最小值和最大值之间”);
}
return input;//这里的输入类型现在是StringOfLength
};
//现在我们可以使用类型构造函数了
const myString=stringOfLength('hello',1,10)//myString的类型为stringOfLength
//如果输入无效,类型构造函数将失败
stringOfLength('a',5,10)//错误:输入不在指定的最小值和最大值之间
//幻影类型阻止我们手动指定StringOfLength,如下所示:
常量a:StringOfLength='hello'//类型'hello'不可分配给类型{StringOfLength:unique symbol}
这里有一些限制-您不能阻止某人创建一个无效的类型,如
StringOfLength
,但是您可以添加运行时检查,以确保传递给StringOfLength
构造函数的min
和max
值是有效的。类型就是:类型。它们甚至在运行时都不存在了,这只是JavaScript。类型无法检查字符串是否具有预期长度。您需要为此编写代码。这取决于用例,但如果这是用于数据库存储,则有很多类型验证库(如Mongoose)可以立即执行此操作。如果您澄清您的用例,我相信您会得到更有针对性的建议。@JBNizet我知道静态类型检查在运行时没有帮助。但是当函数在代码中的其他地方被调用时,声明类型有助于检测错误的数据类型。由于tsc不仅是一个类型检查器,而且还是一个传输器,我希望能找到一些解决办法来解决这个问题possible@PatrickRoberts我有一个非常简单的用例。只有一个以字符串作为输入的函数。但我也希望它的长度有个界限,如果我在通话中违反了这个规则,我的编辑会警告我。我不认为有任何直接的解决方案,但有一些方法可以做到这一点,这只适用于静态声明的字符串。对于来自用户输入或任何动态源的字符串,由于JBNizet解释的原因,这是不可能的,因此静态检查长度不是很有用。