Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在typescript中声明最小/最大长度的字符串类型_Javascript_String_Typescript_Validation_Constraints - Fatal编程技术网

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解释的原因,这是不可能的,因此静态检查长度不是很有用。